多处理池完成任务的非阻塞检测

时间:2017-05-03 11:40:30

标签: python python-2.7 multiprocessing

有没有办法知道进程池已经完成了任务的运行?

_process_pool = mp.Pool(processes=num_workers)

我将批量任务添加到池中:

for batch in gen_batches():
   _process_pool.map_async(fn, batch)

有没有办法知道所有任务何时完成? callback似乎无法在这里工作。我想通过调用_process_pool.join()

来避免阻止父进程

1 个答案:

答案 0 :(得分:2)

  

问题:有没有办法知道所有任务何时完成?

AsyncResult的所有pool.map_async(...附加到list,例如:

multiple_results = []
for batch in gen_batches():
   multiple_results.append( _process_pool.map_async(fn, batch) )


if all([ar.ready() for ar in multiple_results]):
    print('Pool done')
else:
    print('Pool any alive')
  

Python»3.6.1文档multiprocessing.pool.AsyncResult

使用Python测试:3.4.2