為什麼我建議你用 Python 多進程?

優質文章,第一時間送達!

为什么我建议你用 Python 多进程?

文 | 饒木陽

Python 是運行在解釋器中的語言,查找資料知道, python 中有一個全局鎖( GI),在使用多進程( Threa)的情況下,不能發揮多核的優勢。而使用多進程( Multiprocess),則可以發揮多核的優勢真正地提高效率。

對比實驗

資料顯示,如果多線程的進程是 CPU 密集型的,那多線程並不能有多少效率上的提升,相反還可能會因為線程的頻繁切換,導致效率下降,推薦使用多進程;如果是 IO 密集型,多線程進程可以利用 IO 阻塞等待時的空閒時間執行其他線程,提升效率。所以我們根據實驗對比不同場景的效率

为什么我建议你用 Python 多进程?

(1)引入所需要的模塊

为什么我建议你用 Python 多进程?

(2)定義 CPU 密集的計算函數

为什么我建议你用 Python 多进程?

(3)定義 IO 密集的文件讀寫函數

为什么我建议你用 Python 多进程?

(4) 定義網絡請求函數

为什么我建议你用 Python 多进程?

(5)測試線性執行 IO 密集操作、 CPU 密集操作所需時間、網絡請求密集型操作所需時間

为什么我建议你用 Python 多进程?

輸出

CPU 密集:95.6059999466、91.57099986076355 92.52800011634827、 99.96799993515015

IO 密集:24.25、21.76699995994568、21.769999980926514、22.060999870300293

網絡請求密集型:4.519999980926514、8.563999891281128、4.371000051498413、4.522000074386597、14.671000003814697

(6)測試多線程併發執行 CPU 密集操作所需時間

为什么我建议你用 Python 多进程?

(7)測試多線程併發執行 IO 密集操作所需時間

为什么我建议你用 Python 多进程?

(8)測試多線程併發執行網絡密集操作所需時間

为什么我建议你用 Python 多进程?

Output : 0.7419998645782471、0.3839998245239258、0.3900001049041748

(9)測試多進程併發執行 CPU 密集操作所需時間

为什么我建议你用 Python 多进程?

Output : 54.342000007629395、53.437999963760376

(10)測試多進程併發執行 IO 密集型操作

为什么我建议你用 Python 多进程?

Output : 12.509000062942505、13.059000015258789

(11)測試多進程併發執行 Http 請求密集型操作

为什么我建议你用 Python 多进程?

Output : 0.5329999923706055、0.4760000705718994

實驗結果

CPU 密集型操作 IO 密集型操作網絡請求密集型操作

为什么我建议你用 Python 多进程?

通過上面的結果,我們可以看到:

多線程在 IO 密集型的操作下似乎也沒有很大的優勢(也許 IO 操作的任務再繁重一些就能體現出優勢),在 CPU 密集型的操作下明顯地比單線程線性執行性能更差,但是對於網絡請求這種忙等阻塞線程的操作,多線程的優勢便非常顯著了

多進程無論是在 CPU 密集型還是 IO 密集型以及網絡請求密集型(經常發生線程阻塞的操作)中,都能體現出性能的優勢。不過在類似網絡請求密集型的操作上,與多線程相差無幾,但卻更佔用 CPU 等資源,所以對於這種情況下,我們可以選擇多線程來執行。

为什么我建议你用 Python 多进程?

好文章,我在看❤️


分享到:


相關文章: