Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
10 / 9 / 3
Регистрация: 17.01.2019
Сообщений: 36

Распараллеливание вложенных циклов

13.01.2020, 17:13. Показов 3332. Ответов 14

Студворк — интернет-сервис помощи студентам
Добрый день, у меня есть код на pygame для вывода изображений и кнопок, при наведении на кнопку она должна менять цвет, но программа не успевает это отобразить, как можно распараллелить вложенный цикл, чтобы наведение на кнопку работало как надо. В heroes 5 элементов.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
    
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
    screen.fill((255, 255, 255))
    for i in heroes:
        image = pygame.transform.scale(load_image("heroes/" + i[-1]), (screen.get_width() // 6, screen.get_height() // 2))
        screen.blit(image, (screen.get_width() // 8 + 0.9 * c * screen.get_width() // 6, screen.get_height() // 5))
        choose.draw(screen.get_width() // 8 + c * screen.get_width() // 6, 3 * screen.get_height() // 4, "Выбрать")
        c += 1
    c = 0
    pygame.display.flip()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2020, 17:13
Ответы с готовыми решениями:

Сохранение значения вложенных циклов
g_matchs = {} for liga in ligs: liga_name = liga.find_element_by_class_name('c-events__liga').text matchs =...

Оптимизация вложенных циклов в задаче
Условия задачи звучат так: У Кролика есть три множества горшочков с мёдом: A, B и C. Все горшочки содержат разное количество мёда....

Организация вывода с использованием вложенных циклов
Помогите решить задачу по Python

14
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.01.2020, 17:27
Лучший ответ Сообщение было отмечено SLWX как решение

Решение

Цитата Сообщение от SLWX Посмотреть сообщение
load_image("heroes/" + i[-1])
Делайте загрузку/трансформацию и обрезку картинки заранее, а не внутри цикла.
0
10 / 9 / 3
Регистрация: 17.01.2019
Сообщений: 36
13.01.2020, 17:43  [ТС]
Смотрите, до while я в heroes из бд выгружаю кортеж с названиями файлов и др. информацией, в for я гружу каждое изображение и вывожу его одновременно с кнопкой. До какого из циклов я должен сделать все действия с картинками, чтобы их вывелось 5 штук?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.01.2020, 17:50
Чтение файлов должно быть до обоих циклов.
0
10 / 9 / 3
Регистрация: 17.01.2019
Сообщений: 36
13.01.2020, 17:55  [ТС]
Как я понимаю, вы предлагаете сделать что-то такое
Python
1
2
3
4
5
6
image1 = load_image(1)
image2 = load_image(2)
.......
imagen = load_image(n)
while True:
   ............
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.01.2020, 18:02
Ну не прям так, но вы идею поняли.
1
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
14.01.2020, 15:49
SLWX, сразу скажу, я не работал с pygame, но в гуи-библиотеках подобного уровня обычно есть штука под названием "анимации".
Программируешь её, чтобы она что-то меняла (цвет, размер или т. п.), и запускаешь. Движок сам занимается выполнением. Поищите, должно быть.

Добавлено через 4 минуты
Бегло посмотрел доку по pygame, ничего подобного не нашёл. М-да, тяжёлый случай.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.01.2020, 17:15
Цитата Сообщение от dondublon Посмотреть сообщение
ничего подобного не нашёл. М-да, тяжёлый случай.
Просто руками перебирают спрайты в цикле: https://github.com/fox0/lua_lo... ua#L43-L57
0
10 / 9 / 3
Регистрация: 17.01.2019
Сообщений: 36
14.01.2020, 18:48  [ТС]
Можете помочь с реализацией не костыльного способа
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
14.01.2020, 19:01
SLWX, переписать на PyQt ?
0
10 / 9 / 3
Регистрация: 17.01.2019
Сообщений: 36
14.01.2020, 19:05  [ТС]
dondublon, игру переписать на qt? Странное решение
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
15.01.2020, 10:03
SLWX, а почему бы нет? Это просто предложение.

Просмотрев доку, я вижу, что pygame гораздо беднее.
Причём там нет очень важной штуки для графического движка - общего цикла событий. Вам приходится писать циклы самому, это сразу видно по доке. Как вы потом будете их объединять, если объектов будет больше одного, для меня загадка.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 10:21
Цитата Сообщение от dondublon Посмотреть сообщение
Как вы потом будете их объединять, если объектов будет больше одного,
Легко: у каждого объекта делается метод update() и вызывается при каждой отрисовки кадра. А объект сам решает нужно ли ему сменить состояние или как отрисоваться.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
objects = []
 
while True:
    window.fill((255, 255, 255))
    for e in pygame.event.get():
        # обработка событий
    
    for i in objects:
        i.update()  # дёргаем методы, пусть считается логика
        
    for i in objects:
        i.draw()    # дёргаем методы, рисуем на экране
 
    pygame.display.flip()
    clock.tick(60)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
15.01.2020, 10:24
Рыжий Лис, ну можно, но выглядит не айс. Всё-таки такие вещи должны быть стандартизированы и, желательно, по умолчанию абстрагированы от программиста. Сужу по Qt, WPF и Unity3d.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.01.2020, 10:31
Да, выглядит не айс. Но это же игровой движок. Некоторые выглядят ещё хуже: https://love2d.org/wiki/love.run
Кликните здесь для просмотра всего текста
Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function love.run()
    if love.load then love.load(love.arg.parseGameArguments(arg), arg) end
 
    -- We don't want the first frame's dt to include time taken by love.load.
    if love.timer then love.timer.step() end
 
    local dt = 0
 
    -- Main loop time.
    return function()
        -- Process events.
        if love.event then
            love.event.pump()
            for name, a,b,c,d,e,f in love.event.poll() do
                if name == "quit" then
                    if not love.quit or not love.quit() then
                        return a or 0
                    end
                end
                love.handlers[name](a,b,c,d,e,f)
            end
        end
 
        -- Update dt, as we'll be passing it to update
        if love.timer then dt = love.timer.step() end
 
        -- Call update and draw
        if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
 
        if love.graphics and love.graphics.isActive() then
            love.graphics.origin()
            love.graphics.clear(love.graphics.getBackgroundColor())
 
            if love.draw then love.draw() end
 
            love.graphics.present()
        end
 
        if love.timer then love.timer.sleep(0.001) end
    end
end


Спасает только производительность движка, написанного на Си и jit-компиляция.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2020, 10:31
Помогаю со студенческими работами здесь

Вводится строка. Пройдя по данной строке 1 раз (без вложенных циклов) построить множество символов, встречающихся в ней
Вводится строка. Пройдя по данной строке 1 раз (без вложенных циклов) построить множество символов, встречающихся в ней

[AMP] Распараллеливание вложенных циклов
Есть участок кода с многократно вложенными циклами,которые необходимо распараллелить с помощью C++AMP,но возникли некоторые...

Распараллеливание циклов
Доброго времени суток. Возникла необходимость распараллелить один численный алгоритм средствами OpenMP. В частности в этом алгоритме...

Распараллеливание циклов
Есть такой цикл std::list<int>::iterator iter; std::list<int>_paramsFFT; for(iter = _paramsFFT.begin(); iter != _paramsFFT.end();...

Распараллеливание циклов
Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru