使用python多处理池时,是否可以在准备好结果时得到结果?
例如,类似这样的东西在results
准备好时就会产生结果,而不仅仅是所有结果都准备好了。
args = [ ... ]
def foo():
pass
pool = multiprocessing.Pool()
results = pool.map_async(foo, l)
for result in results:
save_result(result)
我能想到的唯一方法是
args = [ ... ]
results = []
def foo():
pass
pool = multiprocessing.Pool()
for arg in args:
results.append(pool.apply_async(foo, arg))
while results:
for result in results:
if result.ready():
save_result(result.get())
我在Windows 7 x64上使用Python 3.4
由于您使用的是python 3.2+,因此最简单的方法是使用concurrent.futures
而不是multiprocessing.Pool
。concurrent.futures.as_completed
将为您提供一个迭代器,该迭代器将产生结果。
基本用法结构:
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(foo, arg) for arg in some_args]
for future in concurrent.futures.as_completed(futures):
#do something with completed result
请参阅链接的文档,其中有更多示例可以帮助您入门。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句