1. 程式人生 > >python 多進程,實際上都沒有運行,sleep

python 多進程,實際上都沒有運行,sleep

進程優先級 什麽 fun linux fault poi 卡死 ted 基本

思考
並行運算的代碼塊中,是計算密集型的。因為計算的時間復雜度比較高,跑每一個例子會耗費幾天的時間。因此不存在所謂活少人多的問題。

1.是否是進程優先級的問題
答案為否,因為個進程優先級一致,而每個進程所需的內存量和計算量基本一致,所需運行時間也接近的。

2.是否是代碼層面的問題
答案為否,因為可以看到已經有臺機器可以正常的按照意圖來跑。

3.是否是機器的問題
答案有可能,那究竟是機器的什麽問題呢?在一臺21核和64G內存的機器上,同樣也出現了類似的問題。這應該可以排除核數目和內存占比對此事的影響。

參考
1.https://segmentfault.com/q/1010000011117956
該題主描述了同樣的問題。我覺得比較有意義的回答是這個

multiprocessing.Pool 只是用來啟動多個進程而不是在每個core上啟動一個進程。換句話說Python解釋器本身不會去在每個core或者processor去做負載均衡。這個是由操作系統決定的。如果你的工作特別的計算密集型的話,操作系統確實會分配更多的core,但這也不是Python或者代碼所能控制的或指定的。
multiprocessing.Pool(num)中的num可以很小也可以很大,比如I/O密集型的操作,這個值完全可以大於cpu的個數。
硬件系統的資源分配是由操作系統決定的,如果你希望每個core都在工作,就需要更多的從操作系統出發了~

在後續的回答中給出了一個stackoverflow裏面的此類問題介紹
2.https://stackoverflow.com/questions/21348746/python-multiprocessing-pool-doesnt-use-100-of-each-cpu

該位置解釋中,有談到進程間通信對該問題的影響,但我覺得沒有意義。

有一個解釋我到比較欣賞

You’re asking wrong kind of question. multiprocessing.Process represents process as understood in your operating system. multiprocessing.Pool is just a simple way to run several processes to do your work. Python environment has nothing to do with balancing load on cores/processors.
If you want to control how will processor time be given to processes, you should try tweaking your OS, not python interpreter.
Of course, “heavier” computations will be recognised by system, and may look like they do just what you want to do, but in fact, you have almost no control on process handling.
“Heavier” functions will just look heavier to your OS, and his usual reaction will be assigning more processor time to your processes, but that doesn’t mean you did what you wanted to - and that’s good, because that the whole point of languages with VM - you specify logic, and VM takes care of mapping this logic onto operating system.

大致意思是python解釋器不會協調內核的計算。多進程中的進程是由操作系統來協調的,放在哪個CPU上跑,計算占比等等,要想控制這個,需要控制計算機。

實驗
實驗環境:4C8G
1.工作任務設置成計算密集型
四個任務被均分到四個核上,順利運行

2.計算密集型+每個進程小內存消耗
四個任務被均分到四個核上,順利運行

3.計算密集型+每個進程大內存消耗
計算機卡死(笑cry)

其實可以看到python多進程是正常的!!!Dame!!!

總結
目前linux選擇的操作系統為centos,操作系統不是問題。應該是機器的問題,內核的問題。

——————————————分隔線————————————
有遇到同樣問題的,歡迎討論!

——————————————後記—————————————
現在在做實驗,發現沒有出現以前的情況了,每個核都會正常的處理。我在想之前可能是資源的問題了。內存資源不夠,所以無法同時運行,只能等待!這只是猜想了。
---------------------

原文:https://blog.csdn.net/u013735511/article/details/80079373

python 多進程,實際上都沒有運行,sleep