Twi*_*ech 4 python multithreading
当使用 python 多处理池时,是否可以在准备好结果时获取结果?
例如,像这样的东西,在results准备好时才产生结果,而不仅仅是在所有结果都准备好时才产生结果。
args = [ ... ]
def foo():
pass
pool = multiprocessing.Pool()
results = pool.map_async(foo, l)
for result in results:
save_result(result)
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一方法是
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())
Run Code Online (Sandbox Code Playgroud)
我在 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
Run Code Online (Sandbox Code Playgroud)
请参阅链接的文档,它有更多示例可以帮助您入门。
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |