python 多進程數量 對爬蟲程序的影響

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一下,對程序的提速仍是很明顯,由於多進程耗內存,因此注意內存的優化。

相關文章
相關標籤/搜索