1. 程式人生 > 程式設計 >Python 多執行緒,threading模組,建立子執行緒的兩種方式示例

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)>,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程式設計有所幫助。