這篇文章永久掛在首頁,就是爲了給一些人說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個,有時候不是併發數開的越大速度就越快
統計圖:
總結: