在下面的情况下,何时需要在.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()
之后,进程是否才开始处理函数?
答案 0 :(得分:0)
接近()
防止将更多任务提交到池中。完成所有任务后,工作进程将退出。
加入()
等待所有进程正确终止
以Proper way to use multiprocessor.Pool in a nested loop
开头的良好链接只要您致电pool.apply_async
,流程就会开始处理该功能,它会返回一个结果对象