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

Dro*_*man 4 python pool multiprocessing

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

当池中的所有任务都完成时,我想运行一个新任务.如何判断池中的所有进程何时完成?

Mar*_*cny 10

您希望使用join方法,该方法会停止主进程线程向前移动,直到所有子进程结束:

阻塞调用线程,直到调用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!')
Run Code Online (Sandbox Code Playgroud)

编辑:

与池一起使用join

    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")
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您需要先调用`pool.close()`或`pool.terminate()`,然后才能调用`pool.join()`,因此上述示例实际上无法工作。还要注意,如果以后不再需要使用池,则使用`join()`告诉工作何时完成是可行的选择,因为它需要关闭或终止池。 (2认同)
  • 如果您希望进程并行运行,您需要首先对所有进程调用 start(),然后调用 join。 (2认同)
  • 这个接受的答案**不是**并行运行,因此不是有效的答案。 (2认同)