我试图遵循一个非常简单的多例子:Python的多apply_async永远不会返回在Windows 7的结果
import multiprocessing as mp
def cube(x):
return x**3
pool = mp.Pool(processes=2)
results = [pool.apply_async(cube, args=x) for x in range(1,7)]
然而,我的Windows机器上,我无法得到的结果(在Ubuntu 12.04LTS它完美运行)。
如果我检查results
,我看到以下内容:
[<multiprocessing.pool.ApplyResult object at 0x01FF0910>,
<multiprocessing.pool.ApplyResult object at 0x01FF0950>,
<multiprocessing.pool.ApplyResult object at 0x01FF0990>,
<multiprocessing.pool.ApplyResult object at 0x01FF09D0>,
<multiprocessing.pool.ApplyResult object at 0x01FF0A10>,
<multiprocessing.pool.ApplyResult object at 0x01FF0A50>]
如果我跑results[0].ready()
我总是False
。
如果我运行results[0].get()
python解释器冻结,等待得到的结果永远不会到来。
这个例子非常简单,所以我认为这是一个与OS有关的低级错误(我在Windows 7上)。但也许别人有更好的主意?
'multiprocessing'在交互式Python解释器中不能很好地工作。当您将此代码作为脚本运行时,它是否有效? – 2014-10-31 17:50:17
@moarningsun它在脚本中也不起作用。达诺的解决方案取得了诀窍 – kyphos 2014-10-31 17:54:43