是否可以在完成后获取 python 池结果?

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

roi*_*ppi 6

由于您使用的是 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)

请参阅链接的文档,它有更多示例可以帮助您入门。