Python 多線程,threading模塊,創建子線程的兩種方式示例

這篇文章主要介紹了Python 多線程,threading模塊,創建子線程的兩種方式,結合實例形式分析了Python線程的原理與創建子線程的相關實現技巧,需要的朋友可以參考下
本文實例講述了Python 多線程,threading模塊,創建子線程的兩種方式。分享給大家供大家參考,具體如下:

GIL(全局解釋器鎖)是C語言版本的Python解釋器中專有的,GIL的存在讓多線程的效率變低(哪個線程搶到鎖,就執行哪個線程)。在IO密集型程序中,多線程依然比單線程效率高(GIL通過IO阻塞自動切換多線程)。
推薦我們的Python學習扣qun:774711191 ,看看前輩們是如何學習的!從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF,實戰源碼】,零基礎到項目實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點擊加入我們的 python學習者聚集地

解決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
發佈了51 篇原創文章 · 獲贊 17 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章