2012-12-18 29 views
5

嘗試非常簡單下面的例子使我的電腦停頓下來,讓我不得不重新啓動。檢查任務管理器顯示數百個「python.exe」任務:簡單的玩具如計算機崩潰

import math 
from multiprocessing import Pool 

pool = Pool(processes=2) 
print pool.map(math.sqrt, [1,4,9,16]) 

我使用的是雙核CPU(I52467米),所以我想上面就可以了。

我試着設置processes=1,這會導致一個稍微不同的問題:任務無法完成,但它不會導致我的電腦凍結。

任何想法?

回答

8

我有同樣的問題,我第一次打得四處multiprocessing。將池生成代碼封裝在if __name__ == '__main__'塊中。

import math 
from multiprocessing import Pool 

if __name__ == '__main__': 
    pool = Pool(processes=2) 
    print pool.map(math.sqrt, [1,4,9,16]) 

發生了什麼事是創建子進程的時候,你的模塊正在拆封和無限遞歸重新運行庫的產生代碼。隨着if塊,產卵代碼將只在模塊的父實例上運行。

+0

什麼OS是你嗎? – mgilson

+0

謝謝。修正它完美(我使用贏7)。 – iRoygbiv

+0

@mgilson我在Windows上。 –