Добавляйте новые задачи, когда количество активных заданий становится меньше N - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь распараллелить некоторые очень трудоемкие задачи на определенном количестве ядер.Моя цель - максимально использовать ресурсы сервера.Общее количество процессоров составляет 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()

Как запрограммировать код, который будет запускать новые задачи, когда количество активных заданий становится меньше числа процессоров?

...