python3线程gil_python3爬虫GIL修改多线程实例讲解
我們打開程序后,會發現電腦的內存和cpu發生了變化。在對于前者上面,自然是希望內容占用小,cpu的利用越高越好。那有沒有什么方法可以讓我們的cpu達到滿狀態的運行效果呢?這就得用到我們所學的多線程中的知識了,再正式開始講解之前,我們先來說說操作的思路吧,然后進行代碼對比。
我們都知道,比方我有一個4核的CPU,那么這樣一來,在單位時間內每個核只能跑一個線程,然后時間片輪轉切換。但是Python不一樣,它不管你有幾個核,單位時間多個核只能跑一個線程,然后時間片輪轉。看起來很不可思議?但是這就是GIL搞的鬼。任何Python線程執行前,必須先獲得GIL鎖,然后,每執行100條字節碼,解釋器就自動釋放GIL鎖,讓別的線程有機會執行。這個GIL全局鎖實際上把所有線程的執行代碼都給上了鎖,所以,多線程在Python中只能交替執行,即使100個線程跑在100核CPU上,也只能用到1個核。通常我們用的解釋器是官方實現的CPython,要真正利用多核,除非重寫一個不帶GIL的解釋器。我們不妨做個試驗:
#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個線程,看一下CPU資源占有率:
我們發現CPU利用率并沒有占滿,大致相當于單核水平。
而如果我們變成進程呢?
我們改一下代碼:
#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()
Pass
結果直接飆到了100%,說明進程是可以利用多核的!
以上就是python3爬蟲GIL修改多線程實例講解的詳細內容,更多關于python3爬蟲中的GIL修改多線程的資料請關注我們其它相關文章!
本文標題: python3爬蟲GIL修改多線程實例講解
本文地址: http://www.cppcns.com/jiaoben/python/366162.html
總結
以上是生活随笔為你收集整理的python3线程gil_python3爬虫GIL修改多线程实例讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输卵管堵塞多卵怎么能治好
- 下一篇: python中注释语句和运算_pytho