[英]Python multiprocessing pool never finishes
我正在運行以下(示例)代碼:
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 控制台中運行代碼。
from multiprocessing import Pool
def f(x):
return x * x
def main():
pool = Pool(processes=3) # set the processes max number 3
result = pool.map(f, range(10))
pool.close()
pool.join()
print(result)
print('end')
if __name__ == "__main__":
main()
關鍵步驟是在進程完成后調用pool.close()
和pool.join()
。 否則池不會被釋放。 此外,您應該通過將代碼放在if __name__ == "__main__":
中來在主進程中創建池if __name__ == "__main__":
由於某種原因,您的構造函數將解釋器扔進了線程生產工廠。 您首先需要停止所有正在運行的線程,並且會有很多線程。 如果您打開任務管理器,您會看到大量流氓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))
請注意,我已經刪除了名為參數的進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.