Предположим, у меня есть набор из 20 задач, нагруженных процессором (~ 1 час каждая, но некоторые занимают намного больше времени), которые выполняются путем вызова функции, например. Pool.apply_async(function, Task_list) и т. д. ПК имеет 12 ядер. Таким образом, я могу распределить нагрузку и использовать все 12 ядер.
Результат каждой задачи может потребовать запуска новой задачи (некоторым задачам может потребоваться 1 новая задача). другие, возможно, 10).
Когда требуется новая задача, я хотел бы создать эту задачу в существующем пуле Task_list, чтобы полностью оптимизировать ЦП использование в любое время.
В настоящее время я запускаю 20 задач, жду завершения, запускаю новые ~18 задач, жду завершения, запускаю оставшиеся новые задачи, .. .. при этом бывает, что в течение часа используется всего 1 ядро, а не 12. Это приводит к потере времени вычислений от нескольких часов до суток. Я мог бы запустить обновленную задачу в том же воркере, однако это приведет к еще большей потере)
С пулом кажется невозможным добавлять в пул больше задач, пока оно запущено. Это правильно, или есть какие-то умные способы сделать это, которые я пропустил при поиске повсюду?
(Единственный вариант, который я вижу, — это использовать процесс вместо пула и сделайте цикл while для динамического списка, который запускает типичную задачу как один процесс, при этом позволяя одновременно выполнять только до 12 процессов, и для каждой задачи или новой задачи, поместите их в динамический список и удалите задачу при ее отправке в процесс.)
Подробнее здесь: https://stackoverflow.com/questions/543 ... ker-result
Как добавить дополнительные задачи в работающий многопроцессорный пул на основе результатов работы? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение