您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Python多線程threading模塊如何創建子線程”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Python多線程threading模塊如何創建子線程”這篇文章吧。
GIL(全局解釋器鎖)是C語言版本的Python解釋器中專有的,GIL的存在讓多線程的效率變低(哪個線程搶到鎖,就執行哪個線程)。在IO密集型程序中,多線程依然比單線程效率高(GIL通過IO阻塞自動切換多線程)。
解決GIL(全局解釋器鎖)的問題的三種方法:
1、不要用C語言版本的Python解釋器。
2、讓子線程運行其他語言代碼(例如:主線程運行Python代碼,子線程運行C語言代碼(C語言的動態庫))。
3、多進程代替多線程(多進程可以利用多核CPU)。
創建子線程的第一種方式:
demo.py(通過函數名指定子線程的任務):
import threading def test1(): print("子線程運行了...") def main(): # 通過 target=函數名 的方式定義子線程 t1 = threading.Thread(target=test1) # 通過target指定子線程要執行的任務。可以通過args=元組 來指定test1的參數。 t1.start() # 只有在調用start方法后才會創建子線程并執行 # threading.enumerate() 打印正在執行的線程,包括主線程和子線程 print(threading.enumerate()) # [<_MainThread(MainThread, started 139724821161728)>, <Thread(Thread-1, started 139724795434752)>] # 當子線程沒有結束時,主線程也不會結束。 當主線程結束后,所有的子線程也會結束。 if __name__ == "__main__": main()
運行結果:
子線程運行了...
[<_MainThread(MainThread, started 7076)>, <Thread(Thread-1, started 2832)>]
創建子線程的第二種方式:
demo.py(通過類來定義子線程):
#coding=utf-8 import threading # 通過類定義子線程。 繼承threading.Thread類 class MyThread(threading.Thread): # 開啟子線程時,會自動執行run函數 def run(self): print(self.name) # Thread-1 name屬性中保存的是當前線程的名字 def main(): t = MyThread() # 實例化自定義的子線程 t.start() # 開啟子線程 if __name__ == '__main__': main()
運行結果:
Thread-1
以上是“Python多線程threading模塊如何創建子線程”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。