多处理Python池

时间:2016-12-15 18:08:03

标签: python python-2.7 multiprocessing python-multiprocessing

在下面的情况下,何时需要在.join()上致电.close()Pool?阅读文档,看起来就像等待进程完成一样。例如,如果我这样做:

while True:
    pool = Pool(processes=4)
    results = []
    for x in range(1000):
        result = pool.apply_async(f, (x,))
        results.append(result)

    for result in results:
        result.get(timeout=1)
    print "finished"

我还需要等待其他流程完成join()close()吗?我假设,因为我正在迭代所有异步结果并等待(阻塞)它们完成,所以当我到达print finished时,所有进程都已经退出了吗?

这是对的吗?

此外,进程何时开始处理函数?我注意到有4个进程与ps -elf并行运行。在这种情况下调用result.get()之后,进程是否才开始处理函数?

1 个答案:

答案 0 :(得分:0)

  

接近()

     

防止将更多任务提交到池中。完成所有任务后,工作进程将退出。

     

加入()

     

等待所有进程正确终止

Proper way to use multiprocessor.Pool in a nested loop

开头的良好链接

只要您致电pool.apply_async,流程就会开始处理该功能,它会返回一个结果对象