python3爬蟲中多線程的優(yōu)勢(shì)總結(jié)
有些小伙伴跟小編討論了python中使用多線程原理的問題,就聊到了關(guān)于python多線程的弊端問題,這點(diǎn)可能在使用的過程中大家會(huì)能感覺到。而且之前講過的GIL也是對(duì)python多線程的一種限制。那么,我們?yōu)槭裁催€要用多線程呢?當(dāng)然是多線程的優(yōu)勢(shì)已經(jīng)掩蓋了它本身不足之處,所以我們來加強(qiáng)一下學(xué)習(xí)python多線程的信心吧~
總結(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)度方式,從而簡(jiǎn)化了 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í)行。
python多線程實(shí)例代碼:
1個(gè)線程時(shí):
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/2.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/3.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/4.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/5.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/6.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/7.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/8.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/9.html Done, Time cost: 8.182249069213867
2個(gè)線程時(shí):
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/2.html Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/3.html Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/4.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/5.html Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/6.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/7.html Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/8.html Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/9.html Done, Time cost: 4.0987958908081055
到此這篇關(guān)于python3爬蟲中多線程的優(yōu)勢(shì)總結(jié)的文章就介紹到這了,更多相關(guān)python3爬蟲中多線程的優(yōu)勢(shì)有哪些內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python基礎(chǔ)進(jìn)階之海量表情包多線程爬蟲功能的實(shí)現(xiàn)
- python3爬蟲中多線程進(jìn)行解鎖操作實(shí)例
- python3爬蟲GIL修改多線程實(shí)例講解
- python爬蟲開發(fā)之使用Python爬蟲庫requests多線程抓取貓眼電影TOP100實(shí)例
- python支持多線程的爬蟲實(shí)例
- python爬蟲中多線程的使用詳解
- Python 微信爬蟲完整實(shí)例【單線程與多線程】
- python面向?qū)ο蠖嗑€程爬蟲爬取搜狐頁面的實(shí)例代碼
- python爬蟲爬取快手視頻多線程下載功能
- Python3多線程爬蟲實(shí)例講解代碼
- php與python實(shí)現(xiàn)的線程池多線程爬蟲功能示例
- python 多線程爬取壁紙網(wǎng)站的示例
相關(guān)文章
python 循環(huán)數(shù)據(jù)賦值實(shí)例
今天小編就為大家分享一篇python 循環(huán)數(shù)據(jù)賦值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python 判斷參數(shù)為Nonetype類型或空的實(shí)例
今天小編就為大家分享一篇python 判斷參數(shù)為Nonetype類型或空的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10Python?標(biāo)準(zhǔn)庫?fileinput與文件迭代器
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫fileinput與文件迭代器,fileinput模塊可以對(duì)一個(gè)或多個(gè)文件中的內(nèi)容進(jìn)行迭代、遍歷等操作,更多詳細(xì)內(nèi)容需要的朋友可以參考一下2022-09-09Python?pytorch實(shí)現(xiàn)繪制一維熱力圖
熱力圖是非常特殊的一種圖,可以顯示不可點(diǎn)擊區(qū)域發(fā)生的事情,這篇文章主要為大家介紹了如何利用pytorch實(shí)現(xiàn)繪制一維熱力圖,感興趣的可以了解一下2023-05-05python獲取外網(wǎng)ip地址的方法總結(jié)
這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實(shí)例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下2015-07-07python實(shí)現(xiàn)bitmap數(shù)據(jù)結(jié)構(gòu)詳解
bitmap是很常用的數(shù)據(jù)結(jié)構(gòu),比如用于Bloom Filter中,下面是使用python實(shí)現(xiàn)bitmap數(shù)據(jù)結(jié)構(gòu)的代碼講解,需要的朋友可以參考下2014-02-02Python繪圖之實(shí)現(xiàn)繪制極坐標(biāo)圖像
這篇文章主要介紹了如何利用python繪制極坐標(biāo)圖像,文中的示例代碼講解詳細(xì),具有一定的的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-08-08python 模擬網(wǎng)站登錄——滑塊驗(yàn)證碼的識(shí)別
這篇文章主要介紹了python 模擬網(wǎng)站登錄——滑塊驗(yàn)證碼的識(shí)別,幫助大家更好的理解和學(xué)習(xí)使用python的爬蟲技術(shù),感興趣的朋友可以了解下2021-03-03