Python多線程編程(一):threading模塊綜述
Python這門解釋性語言也有專門的線程模型,Python虛擬機使用GIL(Global Interpreter Lock,全局解釋器鎖)來互斥線程對共享資源的訪問,但暫時無法利用多處理器的優(yōu)勢。在Python中我們主要是通過thread和 threading這兩個模塊來實現(xiàn)的,其中Python的threading模塊是對thread做了一些包裝的,可以更加方便的被使用,所以我們使用 threading模塊實現(xiàn)多線程編程。這篇文章我們主要來看看Python對多線程編程的支持。
在語言層面,Python對多線程提供了很好的支持,可以方便地支持創(chuàng)建線程、互斥鎖、信號量、同步等特性。下面就是官網(wǎng)上介紹threading模塊的基本資料及功能:
實現(xiàn)模塊
thread:多線程的底層支持模塊,一般不建議使用;
threading:對thread進行了封裝,將一些線程的操作對象化。
threading模塊
Thread 線程類,這是我們用的最多的一個類,你可以指定線程函數(shù)執(zhí)行或者繼承自它都可以實現(xiàn)子線程功能;
Timer與Thread類似,但要等待一段時間后才開始運行;
Lock 鎖原語,這個我們可以對全局變量互斥時使用;
RLock 可重入鎖,使單線程可以再次獲得已經(jīng)獲得的鎖;
Condition 條件變量,能讓一個線程停下來,等待其他線程滿足某個“條件”;
Event 通用的條件變量。多個線程可以等待某個事件發(fā)生,在事件發(fā)生后,所有的線程都被激活;
Semaphore為等待鎖的線程提供一個類似“等候室”的結(jié)構(gòu);
BoundedSemaphore 與semaphore類似,但不允許超過初始值;
Queue:實現(xiàn)了多生產(chǎn)者(Producer)、多消費者(Consumer)的隊列,支持鎖原語,能夠在多個線程之間提供很好的同步支持。
Thread類
是你主要的線程類,可以創(chuàng)建進程實例。該類提供的函數(shù)包括:
getName(self) 返回線程的名字
isAlive(self) 布爾標志,表示這個線程是否還在運行中
isDaemon(self) 返回線程的daemon標志
join(self, timeout=None) 程序掛起,直到線程結(jié)束,如果給出timeout,則最多阻塞timeout秒
run(self) 定義線程的功能函數(shù)
setDaemon(self, daemonic) 把線程的daemon標志設(shè)為daemonic
setName(self, name) 設(shè)置線程的名字
start(self) 開始線程執(zhí)行
Queue提供的類
Queue隊列
LifoQueue后入先出(LIFO)隊列
PriorityQueue 優(yōu)先隊列
接下來
接下來的一系列文章,將會用一個一個示例來展示threading的各個功能,包括但不限于:兩種方式起線程、threading.Thread類的重要函數(shù)、使用Lock互斥及RLock實現(xiàn)重入鎖、使用Condition實現(xiàn)生產(chǎn)者和消費者模型、使用Event和Semaphore多線程通信。
相關(guān)文章
Python+streamlit實現(xiàn)輕松創(chuàng)建人事系統(tǒng)
streamlit 是 基于 Python 的一個非常強大的 web 構(gòu)建系統(tǒng),通過該類庫,我們可以實現(xiàn)不需要編寫一行前端代碼而構(gòu)建一個完整的 Web 應(yīng)用。下面我們就來編寫一個簡單的人事系統(tǒng)吧2023-02-02
python 數(shù)據(jù)提取及拆分的實現(xiàn)代碼
這篇文章主要介紹了python 數(shù)據(jù)提取及拆分的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python中WebService客戶端接口調(diào)用及身份驗證的問題
這篇文章主要介紹了Python中WebService客戶端接口調(diào)用及身份驗證的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11

