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

python 多程序,實際上都沒有執行,sleep

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

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