Предположим, у нас есть multiprocessing.Pool
, где рабочие потоки совместно используют multiprocessing.JoinableQueue
, удаляя рабочие элементы и потенциально помещая в очередь больше работы:
def worker_main(queue):
while True:
work = queue.get()
for new_work in process(work):
queue.put(new_work)
queue.task_done()
Когда очередь заполнится, queue.put()
заблокируется. Пока есть хотя бы один процесс, читающий из очереди с queue.get()
, он освободит место в очереди, чтобы разблокировать писателей. Но все процессы могут потенциально блокироваться на queue.put()
одновременно.
Есть ли способ избежать такого заклинивания?