Python多線程編程(一):threading模組綜述

來源:互聯網
上載者:User
Python這門解釋性語言也有專門的執行緒模式,Python虛擬機器使用GIL(Global Interpreter Lock,全域解譯器鎖)來互斥線程對共用資源的訪問,但暫時無法利用多處理器的優勢。在Python中我們主要是通過thread和 threading這兩個模組來實現的,其中Python的threading模組是對thread做了一些封裝的,可以更加方便的被使用,所以我們使用 threading模組實現多線程編程。這篇文章我們主要來看看Python對多線程編程的支援。

在語言層面,Python對多線程提供了很好的支援,可以方便地支援建立線程、互斥鎖、訊號量、同步等特性。下面就是官網上介紹threading模組的基本資料及功能:

實現模組

thread:多線程的底層支援模組,一般不建議使用;
threading:對thread進行了封裝,將一些線程的操作對象化。

threading模組

Thread 線程類,這是我們用的最多的一個類,你可以指定線程函數執行或者繼承自它都可以實現子線程功能;

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

Thread類

是你主要的線程類,可以建立進程執行個體。該類提供的函數包括:
getName(self) 返回線程的名字
isAlive(self) 布爾標誌,表示這個線程是否還在運行中
isDaemon(self) 返回線程的daemon標誌
join(self, timeout=None) 程式掛起,直到線程結束,如果給出timeout,則最多阻塞timeout秒
run(self) 定義線程的功能函數
setDaemon(self, daemonic) 把線程的daemon標誌設為daemonic
setName(self, name) 設定線程的名字
start(self) 開始線程執行

Queue提供的類

Queue隊列
LifoQueue後入先出(LIFO)隊列
PriorityQueue 優先隊列

接下來

接下來的一系列文章,將會用一個一個樣本來展示threading的各個功能,包括但不限於:兩種方式起線程、threading.Thread類的重要函數、使用Lock互斥及RLock實現重入鎖、使用Condition實現生產者和消費者模型、使用Event和Semaphore多線程通訊。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.