python多处理池:如何知道池中的所有工作者何时完成?

时间:2015-05-19 04:16:14

标签: python multiprocessing pool

我在python中运行一个多处理池,在那里我有~2000个任务,被映射到池中的24个工作者。 每个任务都基于一些数据分析和Web服务创建一个文件。

我希望在池中的所有任务完成后运行新任务。如何判断池中的所有进程何时完成?

1 个答案:

答案 0 :(得分:10)

您想使用the join method,它会阻止主进程线程向前移动,直到所有子进程结束:

  

阻止调用线程,直到调用join()方法的进程终止或者直到发生可选超时为止。

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    processes = []
    for i in range(10):
        p = Process(target=f, args=('bob',))
        processes.append(p)

    for p in processes:
        p.start()
        p.join()

     # only get here once all processes have finished.
     print('finished!')

修改

使用join with pools

    pool = Pool(processes=4)  # start 4 worker processes
    result = pool.apply_async(f, (10,))  # do some work
    pool.close()
    pool.join()  # block at this line until all processes are done
    print("completed")