Python中進程、線程、協程區別

Python中進程、線程、協程區別

多進程

適合密集CPU任務,充分利用多核CPU資源(大量的並行計算,循環計數運算)
缺點:
多個進程之間的通信成本和切換開銷很高,如果程序涉及到大量數據通信或切換任務,不適合用多進程
multiprocessing

多線程

密集IO任務(網絡IO,磁盤IO,數據庫IO)
threading,multiprocessing.dummy
缺點:同一個時間內存一次只能運行一個線程,可以做到併發,但是不能做到並行
優點:通信方便,切換開銷小(非常適合爬蟲這種不斷切換任務的場景)

協程

微線程,不由操作系統調度(沒有CPU切換開銷),特點是在單個線程上切換多個函數任務,切換掉段任務由程序員控制,不涉及操作系統管理,也不需要處理器
gevent
gevent.monkey.patch_all():降Python底層的網絡庫(socket,select)打個補丁,在執行網絡任務時可以按異步的方式執行(涉及到網絡IO阻塞會自動切換協程)
優點:
執行任務基於程序員管理,不需要操作系統調度,沒有切換開銷,執行效率非常高。
缺點:
單線程執行,不能處理密集CPU任務,本地磁盤密集IO任務
注意:協程是在原有的網絡請求庫上打了補丁,所以適用於爬蟲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章