![](/img/trans.png)
[英]Clarification on the `processes` argument for Python's `multiprocessing.Pool`
[英]Python's multiprocessing.Pool spawns new processes
我對多處理模塊有一個簡單的問題。 我正在使用multiprocessing.Pool的map()
函數來加快本地計算機上自寫代碼的執行速度。 但是,此代碼在迭代循環中運行,每次循環迭代時,我都會在計算機中生成其他Python進程。 (這是一個問題,因為系統緩慢地停止運行)。 這是一個簡單的例子:
from multiprocessing import Pool
import os
nthreads = 2
for ii in xrange(5):
pool = Pool(processes=nthreads) # (in my code, Pool is inside a pickleable function.)
runningProcesses = os.popen('ps | grep ython').readlines()
nproc = len(runningProcesses)
print "After iteration %i there were %i Python processes running!" % (ii, nproc)
輸出為:
After iteration 0 there were 5 Python processes running!
After iteration 1 there were 7 Python processes running!
After iteration 2 there were 9 Python processes running!
After iteration 3 there were 11 Python processes running!
After iteration 4 there were 13 Python processes running!
我應該如何安排我的代碼以避免產生許多新的Python進程? 我正在運行具有多處理v0.70a1的Python 2.7.6,並且在運行OSX 10.8.5的4核MacBook Pro上。
將pool = Pool(processes=nthreads)
放在for
循環上方
正如評論中所討論的那樣,池中的工作進程並未關閉/加入,因此它們永遠不會終止。 此處的最高答案顯示了在不再需要池時如何清理它: Python多處理池,連接; 等不及要繼續?
附帶說明一下,如果要創建大量的工作程序並使用它們執行非常短/快速的工作,則可能會發現性能下降-操作系統創建和銷毀進程會產生開銷。 如果是這種情況,那么您應該考慮在整個應用程序中使用一個池。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.