簡體   English   中英

Python的多處理池產生新進程

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

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