1. 程式人生 > 其它 >非同步爬蟲之多執行緒與執行緒池的區別

非同步爬蟲之多執行緒與執行緒池的區別

技術標籤:爬蟲筆記python多執行緒

非同步爬蟲的方式:

- [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))

結果如下圖所示,註釋也在程式碼上面寫清楚了,一起下載,堵塞情況下,很適合。

歐克,點個贊在離開