2016-03-07 109 views
0

我正在下面(示例)代碼:Python的多處理池無法完成

from multiprocessing import Pool 

def f(x): 
    return x*x 

pool = Pool(processes=4) 
print pool.map(f, range(10)) 

但是,代碼永遠不會完成。我究竟做錯了什麼?

pool = Pool(processes=4) 

成功完成後,它似乎停止在最後一行。甚至沒有按ctrl + c中斷執行。我正在Spyder的ipython控制檯中運行代碼。

+0

我得到'from:無法讀取/ var/mail/multiprocessing'。任何地方解決這個問題,我可以真正運行你的代碼? – gsamaras

+0

您的代碼應該打印出[[0,1,4,9,16,25,36,49,64,81]]。你如何執行它? – 2016-03-07 10:18:24

+1

程序打印什麼?嘗試將最後兩行放在if __name__ =='__main__'中: – ventik

回答

1

由於某種原因,您的構造函數將解釋器拋入線程生產工廠。 您首先需要停止所有正在運行的線程,並且會有噸。如果你調出任務管理器,你會看到大量的流氓python.exe任務。殺死他們批量試:

taskkill /F /IM python.exe 

你需要做上述幾次,確保任務管理器不顯示了任務python.exe。這也會殺死你的spyder實例。所以確保你保存。

現在改變你的代碼如下:

from multiprocessing import Pool 

def f(x): 
    return x*x 

if (__name__ == '__main__'): 
    pool = Pool(4) 
    print pool.map(f, range(10)) 

請注意,我已經刪除了過程命名參數。

+0

它沒有幫助。它會在'print pool.map(f,range(10))'行中輸入看起來像無限循環的東西。 – SMeznaric

+0

一個有趣的事情是,通過按ctrl + c來停止評估似乎也是不可能的。 – SMeznaric

+0

這是正確的我正是用它來解決它。等一下,讓我看看我明確嘗試了什麼。 – siphr