2012-09-20 57 views
2

我有一個python腳本,正在做一些映射reduce-ish ETL。我不是代碼的創始人,但正在努力分析/診斷其運行時間以進行一些改進。進程和池類是否共享相同的工人?

在封裝,它採用的是「過程」:

worker = Process(target=grab_worker) 

worker.start() 

,做了perpectual FTP循環,從我們的CDN提取新文件,不能包含FTP代碼,但不應該是相關的問題

稍後在代碼中,我們創建了一個工人Pool的實例,它運行一些非同步功能:

workerpool = multiprocessing.Pool(processes=4) 
# ... 
resultobjs[k] = workerpool.apply_async(func, args=fargs) 

再次,底層代碼繮繩應與我認爲不包括代碼的問題無關。

我的問題是,在Python中,一旦我創建了工作人員Pool,工作人員將與Process「共享」嗎?換句話說,如果我首先創建1個工作進程正在執行某個操作,稍後在執行時使用一個池類創建工作人員,當循環返回並嘗試運行在進程中註冊的函數時,它會使用以前創建的工人?

或者,相反,它保持「熱側熱和冷端冷」允許每個類實例僅引用它已經催生了工人(Process重用它的一個工人以前創建,並Pool繼續使用其指定的工人與Process使用由Pool生成的工人)。

回答

1

mp.Processmp.Pool一無所知。 因此對mp.Process的調用不會以某種方式使用mp.Pool產生的進程。

相關問題