我有一個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
生成的工人)。