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


1. 首先看一下 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個關鍵詞,去爬取微博的搜索接口,通過開不同的進程數據,評估爬蟲耗時情況。

五: 測試過程:

  2 .開32個多進程爬蟲耗時情況:

    程序耗時:

          

 

 

 

  3 .開64個多進程爬蟲耗時情況:

    程序耗時: 

        

 

 

   

 

                                

 

 

 

         

  4 .開128個多進程爬蟲耗時情況:

    程序耗時:

          

 

 

  5 .開256個多進程爬蟲耗時情況:

     程序耗時:

        

 

 

        

  6 .開512個多進程爬蟲耗時情況:

    程序耗時:

                                   

 

 

 

  7 .開768個多進程爬蟲耗時情況:

    程序耗時:

        

 

 

 

 

       8 .開1024個多進程爬蟲耗時情況:

    程序耗時:

        

 

 

六.  數據統計分析:

    

 

     

 

 

 

七.  結論:多進程數據量在512一下,對程序的提速還是很明顯,因為多進程耗內存,所以注意內存的優化。

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM