我想在Python中获取由Pool.apply_async运行的函数的结果。
如何将结果分配给父进程中的变量?我试图使用回调但似乎很复杂。
答案 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。
在任何情况下,您都需要检查线程是否已完成。