2016-02-23 81 views
0

我寫了使用池,處理一些文件的Python程序啓動並行處理(16)。在運行開始時,進程數保持爲16,直到幾乎所有文件都得到處理。然後,出於某些我不明白的原因,當只剩下幾個文件時,一次只運行一個進程,這會使處理時間比所需時間長得多。你能幫忙嗎?Python的作業多池號不正確

+2

無需任何代碼,並沒有關於您的調度策略的任何信息,它會很困難來幫助你。看看http://stackoverflow.com/help/mcve。 – hagello

+0

可能每個進程在啓動時都有專門的負載。他完成後停止。 –

+0

嗨,代碼以非常直接的方式進行:pool multiprocessing.Pool(processes = 16),然後pool.map(...)用於將函數映射到參數列表。 – james0011

回答

0

Python在開始執行您在Pool的applyasync/asyncmap中指定的過程之前,爲每個工作人員分配一項工作。

例如,讓我們說,你有8個文件要處理,你開始有4名工人池。

在開始文件處理之前,將爲每個工作人員分配兩個特定文件。這意味着,如果一些工作人員比其他人早結束其工作,只會「休息一下」,並不會開始幫助其他人。

+0

那麼,我能做些什麼來確保最大數量的進程(<= 16)始終運行?因爲當只剩下幾個文件時,一次只能運行一個作業,一個接一個地運行,這會使總時間非常長。謝謝! – james0011

+0

總是最大數量的過程運行。但更多的信息,我不得不要求一個代碼示例。如果沒有特定的代碼,我無法回答更多問題。 – Xxxo

+0

嗨,正如我在回覆hagello時所寫的,代碼以非常直接的方式進行:pool multiprocessing.Pool(processes = 16),然後使用pool.map(...)將函數映射到參數列表是要處理的文件的列表。謝謝! – james0011

0

map()使用CHUNKSIZE 1,而不是由自己猜測的最佳價值,ES:

pool = Pool(16) 
pool.map(func, iterable, 1) 

這應該(理論上),保證負載的工人之間的最佳分配,直到的結束輸入數據。

here