2017-03-16 205 views

回答

4

的解决方案很简单:

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()方法的结果。

希望这会有所帮助!

+0

谢谢。这很干净。 get()可以返回任意的对象类型吗? – THN

+3

@thn - 主要是...子进程只能返回可供选择的对象。池需要序列化数据以将其传回给父级,这就是它的作用。 – tdelaney

+0

我明白了。 +1提到序列化,所以我需要考虑序列化的开销。 – THN

0

那么一个简单的方法是将有一个辅助类是这样的:

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。

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

+0

谢谢。应该导致全局变量?我的意思是它在子进程中被访问? – THN

+1

不一定。但是,结果应该与您调用pool.apply_async的范围相同。 –

+0

我明白了,谢谢。 – THN