亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python異步爬蟲多線程與線程池示例詳解

 更新時(shí)間:2021年09月29日 16:14:55   作者:小緣喵~  
這篇文章主要為大家介紹了Python異步爬蟲多線程與線程池示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

背景

當(dāng)對多個(gè)url發(fā)送請求時(shí),只有請求完第一個(gè)url才會接著請求第二個(gè)url(requests是一個(gè)阻塞的操作),存在等待的時(shí)間,這樣效率是很低的。那我們能不能在發(fā)送請求等待的時(shí)候,為其單獨(dú)開啟進(jìn)程或者線程,繼續(xù)請求下一個(gè)url,執(zhí)行并行請求

異步爬蟲方式

多線程,多進(jìn)程(不建議)

好處:可以為相關(guān)阻塞的操作單獨(dú)開啟線程或者進(jìn)程,阻塞操作就可以異步會執(zhí)行

弊端:不能無限制開啟多線程或者多進(jìn)程(需要頻繁的創(chuàng)建或者銷毀進(jìn)程,線程)

線程池,進(jìn)程池(適當(dāng)使用)

好處:可以降低系統(tǒng)對進(jìn)程或線程創(chuàng)建和銷毀的頻率,從而很好的而降低系統(tǒng)的開銷

弊端:線程或進(jìn)程池中的數(shù)量是有上限的

單線程+異步協(xié)程(推薦)

多線程

正常運(yùn)行如下的代碼,需要花費(fèi)8秒鐘的時(shí)間,因?yàn)閟leep是一個(gè)阻塞的操作,在等待的時(shí)候不會執(zhí)行別的操作,極大地降低了效率

from time import sleep
import time
start = time.time()
def xx(str):
    print('正在下載:', str)
    sleep(2)
str = ['xiaozi', 'aa', 'bb', 'cc']
for i in str:
    xx(i)
end = time.time()
print('程序運(yùn)行時(shí)間:',end-start)

使用多線程后

from threading import Thread
from time import sleep
import time
start = time.time()
def xx(str):
        print('正在下載:',str)
        sleep(2)
str =  ['xiaozi','aa','bb','cc']
def main():
    for s in str:
        #開啟線程,target=函數(shù)名,args=(xx,) ,xx為向函數(shù)傳遞的參數(shù),必須為元組類型,所以后面需要加,
        t = Thread(target=xx,args=(s,))
        t.start()
if __name__ == '__main__':
    main()
    end = time.time()
    print('程序運(yùn)行時(shí)間:',end-start)

但是我們發(fā)現(xiàn)下面的運(yùn)行順序貌似有點(diǎn)亂的

線程池

對上面的改為線程池后運(yùn)行

#倒入線程池模塊對應(yīng)的類
from multiprocessing.dummy import Pool
from time import sleep
import time
start = time.time()
def xx(str):
        print('正在下載:',str)
        sleep(2)
str =  ['xiaozi','aa','bb','cc']
#實(shí)例化一個(gè)線程池對象,線程池中開辟四個(gè)線程對象,并行4個(gè)線程處理四個(gè)阻塞操作
pool = Pool(4)
#將列表中的每一個(gè)列表元素(可迭代對象)傳遞給xx函數(shù)(發(fā)生阻塞的操作)進(jìn)行處理
#map方法會有一個(gè)返回值為函數(shù)的返回值(一個(gè)列表),但是這里沒有返回值所以不考慮
#調(diào)用map方法
pool.map(xx,str)
end = time.time()
print('程序運(yùn)行時(shí)間:',end-start)

以上就是Python異步爬蟲多線程與線程池示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python異步多線程與線程池的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論