python 做爬蟲真的很慢嗎?(協程併發測試 )

這篇文章永久掛在首頁,就是爲了給一些人說Python做爬蟲慢的人啪啪打臉。

總有人說python做爬蟲速度慢,能開併發數少,至於爲什麼慢就是說不上來,今天就是測試一下python語言的速度和併發數量。

在網絡爬蟲中,影響速度的有數據下載,數據解析,數據存儲,最主要的影響是數據下載和數據存儲,數據下載影響是網絡IO,數據存儲是磁盤IO,本次模擬數據下載是1s,然後數據存儲直接是把數據存儲到redis中,redis是內網的redis庫。下面一次併發10w,100w,100w個任務的耗時情況。

服務器是使用的個人筆記本,配置如下

測試代碼如下:

#-*-coding:utf-8-*-
import time
from gevent import monkey
monkey.patch_all()
import gevent
import redis

RedisDatabases = {
    "host": "10.10.25.207",
    "port": "6379",
}

r = redis.Redis(host=RedisDatabases['host'],port=RedisDatabases['port'], db=0)

def spider(item):
    time.sleep(1)
    r.sadd('test',item)

if __name__ == "__main__":


    start_time = time.time()

    result_List = [page for page in range(10000)]
    print ("本次接口獲得的IP個數是:", len(result_List))
    from gevent import pool

    pool = pool.Pool(128)
    jobs = []
    for item in result_List:
        proxie = item
        jobs.append(pool.spawn(spider, item))
    gevent.joinall(jobs, timeout=3600)
    print("程序驗證耗時:", time.time() - start_time)

測試一:

  1w個任務,併發數128 耗時

  

 

測試二:

  10w個任務,併發數128 耗時

  

 

 

 

測試三:

  100w個任務,併發數128 耗時

 

 

測試四:

  100w個任務,併發數256 耗時

 

測試五:

  100w個任務,併發數512耗時

 

測試六:

  100w個任務,併發數1024耗時

  

 

 

 

 

測試七:

  100w個任務,併發數2048耗時

  

 

 

測試八:

  100w個任務,併發數4096耗時

  

 

 

 

測試九:

  100w個任務,併發數8192耗時

  

 

   併發數 8192  耗時521s,並且redis連接錯誤1785個,有時候不是併發數開的越大速度就越快

 

 

統計圖:

    

 

總結:

                                  

 

 

  影響爬蟲因素的方式是多種多樣的,比如數據下載,數據存儲,數據解析,數據庫連接,cpu,內存,路由器,帶寬等因素,但是絕對不是因爲python是解釋型語言,它的速度就應該理所當然的比其他的開發語言慢,強制說python做爬蟲就比go做爬蟲慢或者能開的併發數量少,這肯定是片面的認知。用python做爬蟲主要是優點是開發速度快,代碼維護方便,如果一味的追求效率,可以用c或者c++,開發半個月,維護要兩天,等爬到數據的時候,黃花菜都涼了。

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