在我使用的linux系統上,調度程序並不是非常慷慨,給cpu時間從python的多處理模塊產生的子進程。在4核機器上使用4個子處理器時,根據ps
,我可以獲得22%左右的CPU。但是,如果子進程是shell的子進程,而不是python程序,它會達到接近100%的CPU。但是多處理是一個比手動分割數據更好的接口,並且爲每個分割運行單獨的python程序,並且很好地獲得兩全其美(代碼組織和高CPU使用率)。我嘗試將流程的好壞設置爲-20,但這沒有幫助。操作系統級別的變化加速Python的多處理?
我想知道是否用一些選項重新編譯linux內核將有助於調度程序給予python多進程工作者更多的CPU時間。也許有一個相關的配置選項?
我使用的準確版本是:
$ uname -a
Linux <hostname> 3.19.0-39-generiC#44~14.04.1-Ubuntu SMP Wed Dec 2 10:00:35 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
在這種情況下,可能與我使用多的方式,它的形式是:
with Pool(4) as p:
p.map(function,data)
更新: 這不是一個可重現的問題。這裏報告的結果來自幾天前,我再次進行測試,多處理過程如我所願。也許這個問題應該被刪除,誤導人們對multiprocessing
的期望表現會不太好。
你確定這是內核的責任嗎?這個問題似乎與Python無法真正並行運行作業有關。 – 5gon12eder
多進程工作人員是他們自己的進程與他們自己的PID。這是我的理解,使得這些流程彼此截然不同,例如我的網絡瀏覽器。 – seewalker
你可以[很容易]飽和你的內存總線(即)你內存綁定,不受計算限制。也許,你可以估計或基準確認。看看/ sys/devices/system/cpu/cpu */cpufreq並設置爲「performance」 –