我試圖遵循一個非常簡單的多例子: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