如何获得multiprocessing.Pool.apply_async的结果

时间:2017-03-16 19:28:47

标签: python parallel-processing multiprocessing

我想在Python中获取由Pool.apply_async运行的函数的结果。

如何将结果分配给父进程中的变量?我试图使用回调但似乎很复杂。

2 个答案:

答案 0 :(得分:12)

解决方案非常简单:

import multiprocessing

def func():
    return 2**3**4

p = multiprocessing.Pool()
result = p.apply_async(func).get()
print(result)

由于Pool.apply_async()返回AsyncResult,您只需从AsyncResult.get()方法获得结果。

希望这有帮助!

答案 1 :(得分:2)

一个简单的方法就是拥有一个这样的辅助类:

class Result():
    def __init__(self):
        self.val = None

    def update_result(self, val):
        self.val = val

result = Result()

def f(x):
    return x*x

pool.apply_async(f, (10,), callback=result.update_result)

当线程运行并计算结果时,它将调用你的回调函数来更新result.val。

在任何情况下,您都需要检查线程是否已完成。