web-dev-qa-db-ja.com

multiprocessing.Pool.apply_asyncの結果を取得する方法

Pythonで Pool.apply_async によって実行される関数の結果を取得したいと思います。

結果を親プロセスの変数に割り当てる方法は?コールバックを使おうとしましたが、複雑そうです。

7
THN

解決策は非常に簡単です。

_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()から結果を簡単に取得できます。 メソッド。

お役に立てれば!

15
linusg

簡単な方法は、次のようなヘルパークラスを用意することです。

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が更新されます。

いずれの場合も、スレッドが終了したことを確認する必要があります。