溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python3爬蟲中多線程有什么優(yōu)勢(shì)

發(fā)布時(shí)間:2020-11-24 13:41:59 來源:億速云 閱讀:145 作者:小新 欄目:編程語言

這篇文章主要介紹python3爬蟲中多線程有什么優(yōu)勢(shì),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

總結(jié)起來,使用多線程編程具有如下幾個(gè)優(yōu)點(diǎn):

  • 進(jìn)程之間不能共享內(nèi)存,但線程之間共享內(nèi)存非常容易。

  • 操作系統(tǒng)在創(chuàng)建進(jìn)程時(shí),需要為該進(jìn)程重新分配系統(tǒng)資源,但創(chuàng)建線程的代價(jià)則小得多。因此,使用多線程來實(shí)現(xiàn)多任務(wù)并發(fā)執(zhí)行比使用多進(jìn)程的效率高。

  • Python 語言內(nèi)置了多線程功能支持,而不是單純地作為底層操作系統(tǒng)的調(diào)度方式,從而簡化了 Python 的多線程編程。

 

threading模塊

普通創(chuàng)建方式

import threading
import time
 
def run(n):
    print("task", n)
    time.sleep(1)
    print('2s')
    time.sleep(1)
    print('1s')
    time.sleep(1)
    print('0s')
    time.sleep(1)
 
if __name__ == '__main__':
    t1 = threading.Thread(target=run, args=("t1",))
    t2 = threading.Thread(target=run, args=("t2",))
    t1.start()
    t2.start()
 
----------------------------------
 
>>> task t1
>>> task t2
>>> 2s
>>> 2s
>>> 1s
>>> 1s
>>> 0s
>>> 0s

守護(hù)線程

我們看下面這個(gè)例子,這里使用setDaemon(True)把所有的子線程都變成了主線程的守護(hù)線程,因此當(dāng)主進(jìn)程結(jié)束后,子線程也會(huì)隨之結(jié)束。所以當(dāng)主線程結(jié)束后,整個(gè)程序就退出了。

import threading
import time
 
def run(n):
    print("task", n)
    time.sleep(1)       #此時(shí)子線程停1s
    print('3')
    time.sleep(1)
    print('2')
    time.sleep(1)
    print('1')
 
if __name__ == '__main__':
    t = threading.Thread(target=run, args=("t1",))
    t.setDaemon(True)   #把子進(jìn)程設(shè)置為守護(hù)線程,必須在start()之前設(shè)置
    t.start()
    print("end")
 
----------------------------------
 
>>> task t1
>>> end

我們可以發(fā)現(xiàn),設(shè)置守護(hù)線程之后,當(dāng)主線程結(jié)束時(shí),子線程也將立即結(jié)束,不再執(zhí)行。

從上面簡單的兩個(gè)多線程使用案例上,我們已經(jīng)可以學(xué)到多線程一些應(yīng)用的地方了,不過小編還是喜歡用python爬蟲多線程的優(yōu)勢(shì)來獲取更多的數(shù)據(jù),小伙伴們也可以開拓其他的使用。

以上是“python3爬蟲中多線程有什么優(yōu)勢(shì)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI