Python這門解釋性語言也有專門的線程模型,Python虛擬機使用GIL(Global Interpreter Lock,全局解釋器鎖)來互斥線程對共享資源的訪問,但暫時沒法利用多處理器的優點。編程
在Python中咱們主要是經過thread和 threading這兩個模塊來實現的,其中Python的threading模塊是對thread作了一些包裝的,能夠更加方便的被使用,因此咱們使用 threading模塊實現多線程編程。這篇文章咱們主要來看看Python對多線程編程的支持。多線程
在語言層面,Python對多線程提供了很好的支持,能夠方便地支持建立線程、互斥鎖、信號量、同步等特性。下面就是官網上介紹threading模塊的基本資料及功能:ide
實現模塊函數
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多線程通訊。