Python 多執行緒,threading模組,建立子執行緒的兩種方式示例
阿新 • • 發佈:2020-01-09
本文例項講述了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)>,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相關內容感興趣的讀者可檢視本站專題:《Python程序與執行緒操作技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》、《Python+MySQL資料庫程式設計入門教程》及《Python常見資料庫操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。