你真的了解Python嗎?什么場景使用多線程,什么場景使用多進程?
引言
涉及并發的場景,大家想到使用多線程或多進程解決并發問題;
一般情況下,解決多并發場景問題,多數語言采用多線程編程模式(線程是輕量級的進程,共用一份進程空間)。
也同樣適用于Python多并發處理嗎?
答:不是的,針對并發處理,Python多線程和多進程是有很大差異的!
Python多線程和多進程差異
Python多線程不能使用CPU多核資源,即同一時刻,只有一個線程使用CPU資源,所以使用Python多線程不能算是并發。
如果想要充分利用CPU多核資源,做到多并發,這就需要Python多進程的了!
也就是說:只有Python多進程才能利用CPU多核資源,做到真正的多并發!
Python多線程和多進程應用場景
既然Python多線程不能并發,那存在還有什么意義呢?
其實Python多線程和多進程有自己的應用場景:
- Python多線程適用于I/O密集型場景,如解決網絡IO、磁盤IO阻塞問題,例如文件讀寫、網絡數據傳輸等;
- 而Python多進程更適用于計算密集型場景,多并發,大量計算任務等。
注意:Python多線程和多進程在平時開發過程中,需要注意使用,如果使用Python多線程方式處理計算密集型任務,它比實際單進程處理性能還要慢!所以要注意,看場景類型。
再談Python多線程,全局解釋器鎖(GIL)
為什么Python多線程不能使用CPU多核資源?
為什么Python多線程在同一時刻,只有一個線程使用CPU資源?
正是因為Python有一個全局解釋器鎖(GIL,全稱Global Interpreter Lock),它使得Python多線程無法使用CPU多核資源,保證同一時刻只有一個線程在使用CPU資源;當出現IO阻塞時,解鎖,釋放CPU資源,其他線程才能申請到鎖,使用CPU資源。
Python并發編程
Python多進程編程使用的模塊庫:multiprocessing模塊,是Python內置的多進程處理庫,使用與線程庫threading.Thread類似。
Python多線程編程使用的模塊庫:
- thread模塊 Python內置,比較底層,不推薦使用
- threading模塊 Python內置
- multiprocessing.dummy模塊 Python內置
補充:
multiprocessing模塊 和 multiprocessing.dummy模塊
兩者的區別在于:前者是多進程,后者是多線程;但是他們編程接口完全一致;
所以很方便的將代碼在多線程和多進程進行切換!
由于篇幅有限,暫不介紹編程模塊具體使用,以后會開專題補上!
之前整理的Python多線程和多進程思維導圖供大家參考:
Python多進程編程

Python多線程編程
