threading模塊,python下的多線程
阿新 • • 發佈:2018-08-28
read lob -s prev sts other sleep native int 一、GIL全局解釋器鎖
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)
無論你啟動多少個線程,Python解釋器在同一時刻,都只允許一個線程在cpu上執行,Python啟動一個線程是調用C語言的接口,讓操作系統啟動線程,所以所有的線程調度是操作系統在執行,而Python解釋器在啟動線程後只能等待操作系統返回結果。所以Python解釋器為了防止同一時刻多個線程操作同一個數據,造成數據混亂,所以在cpython解釋器中,加入了global interpreter lock。
註意:Jpython、pypy等解釋器都沒有GIL
二、Python中的多線程- python 中的多線程雖然不能並行,但是能達到高並發的效果。並不是一無用處
2.2 Join及守護線程import threading import time def run(i): #定義每個線程要運行的函數 print("線程::%s 正在運行" %i) time.sleep(1) if __name__ == '__main__': t1 = threading.Thread(target= run, args=(1,)) #生成一個線程實例 參數還有name 線程名,daemon 是否守護線程 True t2 = threading.Thread(target= run, args=(2, )) #生成另一個線程實例 t1.start() #啟動線程 t2.start() #啟動另一個線程 print(t1.getName()) #獲取線程名 print(t2.getName())
當你在啟動一個線程之後,前面說過由於是調用系統創建,所以主進程就和創建的線程沒有關系了,
threading模塊,python下的多線程