1. 程式人生 > >Python多執行緒(三)

Python多執行緒(三)

引言

 在前面的章節我們介紹了使用執行緒和不使使用執行緒的對比例項,並且引入了鎖的概念,這節課我們來了解一下更高階的threading模組。

threading

 在threading模組中不僅包含了Thread類,還包含了非常好用的同步機制,下面我們先看下threading的一些屬性介紹:

物件 描述
Thread 表示一個執行執行緒的物件
Lock 鎖原語物件
RLock 可重入鎖物件,使單一執行緒可(兩次)獲得已持有的鎖(遞迴鎖)
Condition 條件變數物件,使得一個執行緒等待另一個執行緒滿足特定的“條件”,比如改變狀態或者資料值
Event 條件變數的通用版本,任意數量的執行緒等待某個事件的發生,在該事件發生後所有執行緒將被啟用
Semaphore 為執行緒間共享的有限資源提供了一個“計數器”,如果沒有可用資源時會被阻塞
BoundedSemaphore 與Semaphore類似,不過它不允許超過初始值
Timer 與Thread類似,不過它要在執行前等待一段時間
Barrier 建立一個“障礙”,必須達到指定的執行緒數後才可以繼續

 在前面的章節我們提到了鎖和sleep(6)的討論,不知道有沒有同學去實驗,如果不引入鎖並且也不適用sleep(6)最後會導致什麼結果?大家可以去試一下。  根據上一個問題的討論,所以在這裡我不建議大家適用Thread模組,因為它沒有守護執行緒這個概念,當主執行緒退出的時候,所有的子執行緒都將終止,不管他們是否正在工作當中。如果你不想這種事情發生,那就必須引入守護執行緒的概念了。  threading模組支援守護執行緒,守護執行緒一般是一個等待客戶端請求服務的伺服器,如果沒有客戶端的請求,守護執行緒就是空閒的。如果把一個執行緒設定成為守護執行緒,就表示這個執行緒是不重要的,程序退出時不需要等待這個執行緒執行完成。  如果主執行緒準備退出時,不需要等待某些子執行緒完成,就可以為這些子執行緒設定守護執行緒標記。該標記為true時,表示該執行緒不重要。或者說該執行緒只是用來等待客戶端請求而不做任何其他的事情。 這節就到這裡吧,明天繼續。更多內容請持續關注公眾號“計算機自學平臺”