Python:使用threading模塊實現多線程編程一[綜述]

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多線程通訊。

相關文章
相關標籤/搜索