小編給大家分享一下怎么用python3爬蟲中的GIL修改多線程,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)是專業(yè)的綿竹網(wǎng)站建設(shè)公司,綿竹接單;提供網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行綿竹網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!我們都知道,比方我有一個(gè)4核的CPU,那么這樣一來(lái),在單位時(shí)間內(nèi)每個(gè)核只能跑一個(gè)線程,然后時(shí)間片輪轉(zhuǎn)切換。但是Python不一樣,它不管你有幾個(gè)核,單位時(shí)間多個(gè)核只能跑一個(gè)線程,然后時(shí)間片輪轉(zhuǎn)??雌饋?lái)很不可思議?但是這就是GIL搞的鬼。任何Python線程執(zhí)行前,必須先獲得GIL鎖,然后,每執(zhí)行100條字節(jié)碼,解釋器就自動(dòng)釋放GIL鎖,讓別的線程有機(jī)會(huì)執(zhí)行。這個(gè)GIL全局鎖實(shí)際上把所有線程的執(zhí)行代碼都給上了鎖,所以,多線程在Python中只能交替執(zhí)行,即使100個(gè)線程跑在100核CPU上,也只能用到1個(gè)核。通常我們用的解釋器是官方實(shí)現(xiàn)的CPython,要真正利用多核,除非重寫一個(gè)不帶GIL的解釋器。我們不妨做個(gè)試驗(yàn):
#coding=utf-8 from multiprocessing import Pool from threading import Thread from multiprocessing import Process def loop(): while True: pass if __name__ == '__main__': for i in range(3): t = Thread(target=loop) t.start() while True: pass
我的電腦是4核,所以我開了4個(gè)線程,看一下CPU資源占有率:
我們發(fā)現(xiàn)CPU利用率并沒有占滿,大致相當(dāng)于單核水平。
而如果我們變成進(jìn)程呢?
我們改一下代碼:
#coding=utf-8 from multiprocessing import Pool from threading import Thread from multiprocessing import Process def loop(): while True: pass if __name__ == '__main__': for i in range(3): t = Process(target=loop) t.start() while True: Pass
結(jié)果直接飆到了100%,說(shuō)明進(jìn)程是可以利用多核的!
如果小伙伴們運(yùn)行的結(jié)果也是cpu百分之百,就說(shuō)明本次的修改成功了。為了更直觀的讓大家看出前后區(qū)別,小編特意準(zhǔn)備了前后的對(duì)比,說(shuō)明GIL修改多線程的方法是可行的!
看完了這篇文章,相信你對(duì)怎么用python3爬蟲中的GIL修改多線程有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
新聞名稱:怎么用python3爬蟲中的GIL修改多線程-創(chuàng)新互聯(lián)
鏈接URL:http://chinadenli.net/article12/cdpggc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、外貿(mào)建站、小程序開發(fā)、搜索引擎優(yōu)化、電子商務(wù)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容