Как добавить дополнительные задачи в работающий многопроцессорный пул на основе результатов работы?Python

Программы на Python
Anonymous
Как добавить дополнительные задачи в работающий многопроцессорный пул на основе результатов работы?

Сообщение Anonymous »

Предположим, у меня есть набор из 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»