簡體   English   中英

Python 多處理池永遠不會完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM