1. 首先看一下 python 多進程的優勢和缺點python
多進程優勢: 1.穩定性好: 多進程的優勢是穩定性好,一個子進程崩潰了,不會影響主進程以及其他進程。基於這個特性,經常會用多進程來實現守護服務器的功能。 然而多線程不足之處在於,任何一個線程崩潰均可能形成整個進程的崩潰,由於它們共享了進程的內存資源池。 2.能充分利用多核cpu: 因爲python設計之初,沒預料到多核cpu可以獲得如今的發展,只考慮到了單核cpu。爲了更好的實現多線程之間數據完整性與狀態同步, 因而設計出了一個全局解析器鎖(GIL, global interpreter lock)。 GIL確保Python進程一次運行一個線程(其它線程處於等待I/O或者睡眠狀態),不管當前cpu有多少核心。這就意味着Python雖然能夠實現多線程, 可是在任意時間點僅有一個核心在執行Python指令(即線程沒法並行運算),沒法發揮現代多核cpu的性能。而多進程能夠利用多核cpu。 多進程缺點: 1. 建立進程的代價很是大: 由於操做系統要給每一個進程分配固定的資源,而且操做系統對進程的總數會有必定的限制,若進程過多,操做系統調度都會存在問題,會形成假死狀態。 2. 進程間通訊成本高: 每一個進程都有本身獨立的內存空間,不一樣進程之間的內存空間不共享。進程之間的通訊有操做系統傳遞,致使通信效率低,切換開銷大。 通訊主要經過信號傳遞的方式來實現(實現方式有多種,信號量、管道、事件等,通信都須要過內核,效率低) 3. 切換開銷大: 上下文切換的時候須要保存棧、cpu寄存器、虛擬內存、以及打開的相關句柄等信息,開銷大。
4. 耗內存: python 使用multiprocessing來建立多進程時,不管數據是否不會被更改,子進程都會複製父進程的狀態(內存空間數據等)。
若是主進程耗的資源較多時,不當心就會形成沒必要要的大量的內存複製,從而可能致使內存爆滿的狀況。
二: 測試服務器狀況:服務器
cpu是12核心,內存是128G多線程
三:測試目的:性能
測試目的是由於多進程 切換開銷大,建立進程的代價大,經過開不一樣的進程數量,測試是否會出現進程開的越多,爬蟲的速度越慢的狀況。測試
四:測試軟件條件:優化
1. 用10000個關鍵詞,去爬取微博的搜索接口,經過開不一樣的進程數據,評估爬蟲耗時狀況。spa
五: 測試過程:操作系統
2 .開32個多進程爬蟲耗時狀況:線程
程序耗時:設計
3 .開64個多進程爬蟲耗時狀況:
程序耗時:
4 .開128個多進程爬蟲耗時狀況:
程序耗時:
5 .開256個多進程爬蟲耗時狀況:
程序耗時:
6 .開512個多進程爬蟲耗時狀況:
程序耗時:
7 .開768個多進程爬蟲耗時狀況:
程序耗時:
8 .開1024個多進程爬蟲耗時狀況:
程序耗時:
六. 數據統計分析:
七. 結論:多進程數據量在512一下,對程序的提速仍是很明顯,由於多進程耗內存,因此注意內存的優化。