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

THN*_*THN 5 python parallel-processing multiprocessing

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

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

lin*_*usg 14

解决方案非常简单:

import multiprocessing

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

p = multiprocessing.Pool()
result = p.apply_async(func).get()
print(result)
Run Code Online (Sandbox Code Playgroud)

由于Pool.apply_async()回报的AsyncResult,你可以简单地得到了结果AsyncResult.get()的方法.

希望这可以帮助!

  • @thn - 大多数......子进程只能返回可选对象.池需要序列化数据以将其传递回父级,这就是它的工作方式. (4认同)
  • 请注意,AsyncResult.get()将在结果到达时返回结果,因此它将阻止父进程.要与多个apply_async调用并行化,最好在`p.close()之后使用`async_result = p.apply_async(func)`然后`result = async_result.get()`.p.join()`. (3认同)

Gia*_*los 5

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

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)
Run Code Online (Sandbox Code Playgroud)

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

无论如何,您需要检查线程是否已完成。