Pythonで Pool.apply_async によって実行される関数の結果を取得したいと思います。
結果を親プロセスの変数に割り当てる方法は?コールバックを使おうとしましたが、複雑そうです。
解決策は非常に簡単です。
_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が更新されます。
いずれの場合も、スレッドが終了したことを確認する必要があります。