Python多線程(1)——介紹

來源:互聯網
上載者:User

標籤:

  Python對多線程提供了很好的支援,Python中多線程相關的模組包括:thread,threading,Queue。可以方便地支援建立線程、互斥鎖、訊號量、同步等特性。

  1. thread:多線程的底層支援模組,除了其中提供的 Lock 原語外,一般不建議使用。

  2. threading:基於 thread 模組,將一些線程的操作對象化,該模組提供下列類:

      • Thread,線程類
      • Timer,與Thread類似,但要等待一段時間後才開始運行
      • Lock,鎖原語,和 thread 模組提供的 Lock 相同
      • RLock,可重新進入鎖。使單線程可以再次獲得已經獲得的鎖
      • Condition,條件變數,能讓一個線程停下來,等待其他線程滿足某個“條件”
      • Event,通用的條件變數。多個線程可以等待某個事件發生,在事件發生後,所有的線程都被啟用
      •   Semaphore,為等待鎖的線程提供一個類似“等候室”的結構
      3. Queue:實現了多生產者(Producer)、多消費者(Consumer)的隊列,支援鎖原語,能夠在多個線程之間提供很好的同步支援。提供的類:
      •   

        Queue隊列

      • LifoQueue後入先出(LIFO)隊列

      • PriorityQueue 優先隊列

 

Python線程系列包括以下部分:

  第1篇——Thread對象

  第2篇——常用的線程同步機制

  第3篇——Queue模組與線程編程

  本文將介紹Python線程中的主角,threading.Thread 對象。

 

Thread in Python

1.1 Thread對象的建立

  通過執行個體化Thread類型獲得一個Thread對象:

threading.Thread(name=None, target=None, args=(), kwargs={})

  參數的含義:

  •   name:新線程的名稱,如果沒有指定,python會為其產生一個隨機的唯一名稱;
  •   target:新線程中將要執行的函數;t.run() 會調用 target(*args, **kwargs)
  •   args和kwargs:這是傳遞給線程中啟動並執行主函數 target 的參數,當線程開始運行時,將會以這些參數調用執行主函數 target()。

 

1.2 Thread對象的方法

t.getName()

  返回線程當前的名字。

  

t.setName(name)

  設定線程的名字,線程的名稱並不要求唯一。

  

t.isAlive()

  判斷這個線程是否還在運行中(active)——已經調用了start() 而 run() 還沒有執行結束。

 

t.isDaemon()

  判斷線程是不是一個daemon線程,初始狀態下,線程 t1 只有在建立自己的線程 t0 是daemon時,自己才是daemon的。

 

t.setDaemon(daemonic)

  把線程的daemon標誌設為daemonic(真或假)

  daemon 線程是指,即使這個線程 t 的狀態是 active,Python也可以終止 t(可能是通過終止 t 所在的進程);非daemon線程沒有終止前,Python會一直保持運行直到其終止。

  setDaemon()需要在start()之前調用。

 

t.join(timeout=None)

  這個函數需要注意,比如在一個線程 t1 的執行流程中調用 t2.join(),則 t1 阻塞直到 t2 線程執行結束,如果指定 timeout,則 t1 最多阻塞timeout秒,否則 t1 將一直等下去。

  join()只能在start()之後調用;

 

t.run()

  線程通過 run() 調用傳入的主函數 target,不要直接調用run(),而是調用start()函數,start()函數會調用run()。

 

t.start()

  開始線程執行

  

Python線程啟動並執行流程

  1. 建立一個線程 t= threading.Thread(),此時新建立的線程並不會立即執行;

  2. 如果想要將 t 設定為守護線程,在調用 t.start() 之前調用 t.setDaemon(True);否則忽略本步;

  3. 調用 t.start(),此時線程開始執行,狀態更新為 active。更具體的,start() 會進一步調用 run() 函數,run() 函數再去調用建立線程對象時傳入的主函數 target,從而讓線程有了執行的具體內容;

  4. 當線程中的主函數執行完成或遇到未處理的異常時,線程終止執行;daemon線程也可能因為所在進程終止而被Python終止。

Python多線程(1)——介紹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.