Я пытаюсь распараллелить некоторые очень трудоемкие задачи на определенном количестве ядер.Моя цель - максимально использовать ресурсы сервера.Общее количество процессоров составляет 20, но количество задач, которые нужно выполнить, намного больше (скажем, 100).
Каждая задача выполняется в разное время, поэтому приведенный ниже код оставляет возможность для определенного числаядра бездействуют без работы.
import multiprocessing as mp
def some_task(*args):
# Something happening here
pass
cpu_count = mp.cpu_count()
p = mp.Pool(cpu_count)
n_thread = 1
for something in somethings:
p.apply_async(some_task, args=(something, ))
if n_thread == cpu_count:
p.close()
p.join()
p = mp.Pool(cpu_count)
n_thread = 1
continue
n_thread += 1
p.close()
if n_thread != 1:
p.join()
Как запрограммировать код, который будет запускать новые задачи, когда количество активных заданий становится меньше числа процессоров?