我想得到Pool.apply_async在Python中运行的函数的结果。
如何将结果分配给父流程中的变量?我尝试使用回调,但似乎很复杂。
解决方案非常简单:
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()
方法得到结果。
希望这有帮助!
一个简单的方法是有一个这样的帮助程序类:
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。
在任何情况下,您都需要检查线程是否已完成。