爬蟲該選擇多進程多線程還是協程?

想要選擇某一種方式,不妨先喝口水看一下三者各自的優劣之處:

多進程:密集CPU任務,需要充分使用多核CPU資源(服務器,大量的並行計算)的時候,用多進程。 multiprocessing
缺陷:多個進程之間通信成本高,切換開銷大。

多線程:密集I/O任務(網絡I/O,磁盤I/O,數據庫I/O)使用多線程合適。
threading.Thread、multiprocessing.dummy
缺陷:同一個時間切片只能運行一個線程,不能做到高並行,但是可以做到高併發。

協程:又稱微線程,在單線程上執行多個任務,用函數切換,開銷極小。不通過操作系統調度,沒有進程、線程的切換開銷。genvent,monkey.patchall

多線程請求返回是無序的,那個線程有數據返回就處理那個線程,而協程返回的數據是有序的。

缺陷:單線程執行,處理密集CPU和本地磁盤IO的時候,性能較低。處理網絡I/O性能還是比較高.

總體來看,大概多線程可能是最佳人選,爬蟲畢竟大部分操作都是密集I/O操作,但是我覺的吧,協程也挺好用,雖然本地磁盤IO可能稍微較差,但是可以在網絡IO部分用協程來處理,磁盤IO部分另尋他法。
多進程也挺喜歡的,不過最近在寫爬蟲的時候遇到過每個進程都需要對應一個cookie,所以沒有辦法只能放棄了多進程,採用了協程。
總之,無論哪種辦法都有各自適合的場景,選擇之前先分析自己需要處理的是哪種情況,在合理的選擇,當然每一種方式都是需要掌握的,畢竟我們都是要成爲大佬的人呢,哈哈哈哈,加油,努力並可愛的你。

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