У меня есть Пул рабочих, и я использую apply_async
, чтобы передать им работу.
Мне плевать на результат функции, примененной к каждому элементу.
Кажется, пул принимает любое количество вызовов apply_async
, независимо от того, насколько велики данные или насколько быстро работники могут справиться с работой.
Есть ли способ сделать блок apply_async
, как только определенное количество элементов ожидает обработки? Я уверен, что внутренне, пул использует Очередь, так что было бы тривиально просто использовать максимальный размер для Очереди?
Если это не поддерживается, имеет ли смысл представлять большой отчет, потому что это выглядит как базовая функциональность и довольно тривиально добавить?
Было бы стыдно, если бы по сути пришлось заново реализовать всю логику пула, просто чтобы заставить эту работу.
Вот очень простой код:
from multiprocessing import Pool
dowork(item):
# process the item (for side effects, no return value needed)
pass
pool = Pool(nprocesses)
for work in getmorework():
# this should block if we already have too many work waiting!
pool.apply_async(dowork, (work,))
pool.close()
pool.join()