• <th id="bb20k"></th>
    1. <th id="bb20k"></th>
      1. <th id="bb20k"></th>
        <progress id="bb20k"></progress>

        您的位置:新聞資訊 >文章內容
        爬蟲怎么加快速度采集?使用多線程還是多進程好
        來源:互聯網 作者:admin 時間:2018-12-17 15:13:02

            現在網頁信息比較多,即使是小的網站數據也不少,更何況大網站,如果想要采集大量數據,爬蟲怎么加快速度采集?

            如果還是按照單線爬蟲的采集速度,企業根本沒有時間耗,快速采集數據并挖掘有效信息是企業使用爬蟲的目的,達不到目的,就不需要使用爬蟲了。

            其實是有許多方法來加快速度采集的,下面小編就為大家分享一下爬蟲怎么加快速度采集。

            一、改變線程數目

            假設線程數為n,線程中下載平均用時為td,線程中數據處理部分(純計算)用時為tc。由于單個Python進程只能使用單CPU核心,因此總的數據處理耗時應是各線程tc的累加即n*tc。因為下載是阻塞操作,CPU可以幾乎同時處理所有下載,因此總的下載耗時就近似為td。那么Python爬蟲的下載速度應為:

            

        爬蟲怎么加快速度采集?使用多線程還是多進程好


            等式稍作變換后為:

            

        爬蟲怎么加快速度采集?使用多線程還是多進程好

            對于特定的網站td為定值(常量),對于特定的數據處理算法tc也近似為定值。所以下載速度的最大值也不會超過1/tc。試想一下,如果線程函數內數據處理部分耗時為0.1秒,那么不管線程數再大,整體的速度也不會超過10個/秒。線程數n的增大的確能夠使得v增大,但是如果tc值較大,n的值達到一定程度后對v的影響就很小了。假設tc = 0.1,td = 3,那么 v = 1/(0.1+3/n)的函數圖象應為如下圖所示:

            

        爬蟲怎么加快速度采集?使用多線程還是多進程好

         

            由圖可以看出當n在100以后對v的影響就不大了。因此不能盲目的增大線程數n。線程數越大消耗的系統資源就越多,同時過多的CPU切換反而會增加整體花費的時間。

            二、改變進程數目

            如何讓你的爬蟲跑的更快呢?通過上面的分析我們知道單個Python爬蟲進程最大速度為1/tc。如果我們同時啟動m個進程,那么整體的速度就能提高m倍。但是m的值也不是越大越好,因為進程的系統開銷比線程還要大。一般進程數取CPU的核心數的為宜(具體可視實際CPU使用率情況調整)。

            如下圖所示,為我們在一4核機器上同時啟動4進程的情況。只啟動一個進程時速度最大僅為13個/秒,同時啟動4個進程,整體的速度就達到約50個/秒。

            

        爬蟲怎么加快速度采集?使用多線程還是多進程好

            另外,Python雖然有multiprocessing庫,但是我們實際測試其速度遠沒有真正的多個獨立進程快。因此建議用真正的“多進程”。

            多進程的設計增加了程序的開發難度。主要要解決兩大問題:

            1.輸入(任務隊列)。多進程要共享一個任務隊列。如果該任務隊列方案支持網絡,那么就很容易把采集系統做成真正的分布式集群采集。

            2.輸出。簡單的做法就是直接把數據寫入數據庫,但是在爬蟲程序內頻繁操作數據庫勢必會增加耗時。一個較好的方案是將輸出先寫入消息隊列,然后用一單獨進程來處理消息隊列。

            爬蟲怎么加快速度采集?綜上所述,想要加快速度采集可以使用多線程與多進程,二者相比,多進程效果會更好些。


        相關文章內容簡介
        解鎖高速不限量IP代理
        在線咨詢
        微信公眾號

        微信公眾號

        回到頂部
        国产欧美 一区,国产一本大道香蕉AV,国产亚洲卡通另类图片,国产高清AV在线