欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

背景

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

異步爬蟲方式

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

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

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

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

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

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

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

多線程

正常運(yùn)行如下的代碼,需要花費(fèi)8秒鐘的時(shí)間,因?yàn)閟leep是一個(gè)阻塞的操作,在等待的時(shí)候不會(huì)執(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)亂的

線程池

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

#倒入線程池模塊對(duì)應(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è)線程池對(duì)象,線程池中開辟四個(gè)線程對(duì)象,并行4個(gè)線程處理四個(gè)阻塞操作
pool = Pool(4)
#將列表中的每一個(gè)列表元素(可迭代對(duì)象)傳遞給xx函數(shù)(發(fā)生阻塞的操作)進(jìn)行處理
#map方法會(huì)有一個(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異步多線程與線程池的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決torch.to(device)是否賦值的坑

    解決torch.to(device)是否賦值的坑

    這篇文章主要介紹了解決torch.to(device)是否賦值的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python中字符串比較使用is、==和cmp()總結(jié)

    python中字符串比較使用is、==和cmp()總結(jié)

    在Python中比較字符串最好是使用簡(jiǎn)單邏輯操作符,今天為大家講解一下is、==和cmp()使用總結(jié)
    2018-03-03
  • Python線程之同步機(jī)制實(shí)際應(yīng)用場(chǎng)景舉例說明

    Python線程之同步機(jī)制實(shí)際應(yīng)用場(chǎng)景舉例說明

    這篇文章主要給大家分享的是Python線程之同步機(jī)制實(shí)際應(yīng)用場(chǎng)景舉例說明,銀行轉(zhuǎn)賬小栗子供大家參考學(xué)習(xí),希望對(duì)你有一定的幫助
    2022-02-02
  • Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法

    Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法

    這篇文章主要介紹了Python中聲明只包含一個(gè)元素的元組數(shù)據(jù)方法,本文是實(shí)際經(jīng)驗(yàn)總結(jié)而來,沒有碰到這個(gè)需要可能不會(huì)注意到這個(gè)問題,需要的朋友可以參考下
    2014-08-08
  • Python中l(wèi)ist的交、并、差集獲取方法示例

    Python中l(wèi)ist的交、并、差集獲取方法示例

    這篇文章主要介紹了Python中l(wèi)ist的交、并、差集獲取方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python打開網(wǎng)頁和暫停實(shí)例

    python打開網(wǎng)頁和暫停實(shí)例

    這篇文章主要介紹了python打開網(wǎng)頁和暫停實(shí)例,涉及webbrowser模塊與os模塊的使用,是非常具有實(shí)用價(jià)值的一個(gè)技巧,需要的朋友可以參考下
    2014-09-09
  • python爬蟲學(xué)習(xí)筆記--BeautifulSoup4庫(kù)的使用詳解

    python爬蟲學(xué)習(xí)筆記--BeautifulSoup4庫(kù)的使用詳解

    這篇文章主要介紹了Python中使用Beautiful Soup庫(kù)的超詳細(xì)教程,示例代碼基于Python2.x版本,極力推薦!需要的朋友可以參考下
    2021-08-08
  • flask框架藍(lán)圖和子域名配置詳解

    flask框架藍(lán)圖和子域名配置詳解

    這篇文章主要介紹了flask框架藍(lán)圖和子域名配置,結(jié)合實(shí)例形式詳細(xì)分析了flask框架藍(lán)圖和子域名配置相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • python 實(shí)現(xiàn)仿微信聊天時(shí)間格式化顯示的代碼

    python 實(shí)現(xiàn)仿微信聊天時(shí)間格式化顯示的代碼

    這篇文章主要介紹了python 實(shí)現(xiàn)仿微信聊天時(shí)間格式化顯示,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-04-04
  • Python中的枚舉函數(shù)enumerate()的具體用法

    Python中的枚舉函數(shù)enumerate()的具體用法

    本文主要介紹了Python中的枚舉函數(shù)enumerate()的具體用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論