非同步爬蟲之多執行緒與執行緒池的區別
阿新 • • 發佈:2021-01-23
非同步爬蟲的方式:
- [1] 多執行緒、多程序
優點:可以為相關的阻塞單獨開啟,然後就可以非同步執行
缺點:無法無限制的開啟
- [2] 執行緒池、程序池
優點:降低他的消失頻率
缺點:池中的程序有上限
那麼我的建議就是使用第二種方式,很方便也很好理解。
下面有兩個例子供欣賞:
第一個就是使用的是單執行緒方式:
#匯入模組,需要記錄時間問題
import time
#定義一個函式
def get_page(str):
print("正在下載:",str)
time.sleep(1)
print("下載成功:" ,str)
#下載的內容
name_list = ['王水','文胸','江毛','半斤']
#記錄當前時間
start_time = time.time()
#對列表裡面的內容進行遍歷
for i in range(len(name_list)):
#匯入到函式去
get_page(name_list[i])
#記錄當前時間
end_time = time.time()
#看看耗時多長
print('%d second'% (end_time-start_time))
#使用的是單執行緒方式
結果如下圖所示,由於我設定了時間上面的對比,需要4s
第二個就是程序池了,很快的只需要1s
#使用執行緒池來測試
#匯入模組,需要記錄時間問題
import time
from multiprocessing.dummy import Pool
#記錄當前時間
start_time = time.time()
#定義一個函式
def get_page(str):
print('正在下載:',str)
time.sleep(1)
print('下載成功:',str)
#下載的內容
name_list = ['王水','文胸','江毛','半斤']
#初始化一個執行緒池物件,為什麼是4呢,裡面有四個執行緒呀
pool = Pool(4)
#將列表裡面的內容傳遞引數給函式,沒有返回值
pool.map(get_page,name_list)
end_time = time.time()
#看看耗時多長
print('%d second'% (end_time-start_time))
結果如下圖所示,註釋也在程式碼上面寫清楚了,一起下載,堵塞情況下,很適合。
歐克,點個贊在離開