如何确保在过早调用pool.close()
和pool.join()
之前执行所有pool.apply_async()调用,并通过回调累积其结果
numofProcesses = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=numofProcesses)
jobs=[]
for arg1, arg2 in arg1_arg2_tuples:
jobs.append(pool.apply_async(function1,
args=(arg1,
arg2,
arg3,),
callback=accumulate_apply_async_result))
pool.close()
pool.join()
如果您担心调用
close
或join
会以某种方式取消正在进行的作业,这就是您不应该“过早”调用它们的原因,那么您不必担心这一点close
告诉工人在完成所有排队的工作后退出,然后join
等待他们退出。总之,它们是等待所有工作完成的最简单方式,因此在调用它们之前等待工作完成是多余的在退出池之前,需要等待附加的^{} 对象。那是
在
pool.close()
之前但你可能在这里工作太辛苦了。你可以
cpu_count()
,因此无需添加它with
是否关闭/加入starmap
等待您的结果一个完整的工作示例是
在这种情况下,更好的选择可能是
ProcessPoolExecutor
这是
concurrent.futures
模块的一部分模块有一个函数
concurrent.futures.as_completed
,它可以帮助您了解状态相关问题 更多 >
编程相关推荐