python學習之訊號量
如果想要 控制同時訪問資源的數量,我們可以怎麼做呢?本篇文章將透過 訊號量的操作來達到這一需求。希望感興趣的小夥伴可以堅持看下去同時歡迎提出寶貴的意見讓我們一起進步!
01:訊號量
1)概述:訊號量是用來 控制執行緒併發數的。
2)原理:BoundedSemaphore和Semaphore管理一個內建的計數器。每當 資源釋放遞增時(呼叫acquire)計數器-1,資源消耗時遞減(呼叫release)計數器+1。
3)呼叫格式: threading.BoundedSemaphore/Semaphore(value);值預設1
4)使用場景: 停車位(固定的停車位,車位全部被佔用則進不來;只有車子離開其餘車才能進來)
5)BoundedSemaphore和Semaphore區別: 前者將在呼叫release()時檢查計數器的值是否超過了計數器的初始值,如果超過將丟擲一個異常。
6)注意事項: 計數器不能小於0,當計數器為0時:acquire()將阻塞執行緒至同步鎖定狀態,直到其他執行緒呼叫release()。
02:案例操作
停車場只有3個停車位。來了5輛汽車需要停車這時候就使用Semaphore來控制訪問量了
只能同時允許3輛車同時進入停車場,第4輛車只有等先進入的3輛車中有車出來才可進入
import threading,time,random
semaphore=threading.Semaphore(3)#同一時間只能有3個執行緒處於執行狀態
def run (ii):
semaphore.acquire() # 獲得訊號量:訊號量減一
print(ii,'號車可以進入')
time.sleep(random.randint(0,10)*1)
print(ii,'號停車位釋放')
semaphore.release()# 釋放訊號量:訊號量加一
for i in range(5):#建立5個執行緒
t=threading.Thread(target=run,args=(i,))
t.start()
03:BoundedSemaphore和Semaphore區別案例操作
BoundedSemaphore呼叫時如果計數器的值超過了初始值會丟擲異常;但是Semaphore不會
import threading,time,random
semaphore=threading.BoundedSemaphore(3)#同一時間只能有3個執行緒處於執行狀態
def run (ii):
semaphore.acquire() # 獲得訊號量:訊號量減一
print(ii,'號車可以進入')
time.sleep(random.randint(0,10)*1)
print(ii,'號停車位釋放')
#***************此處高能******************
semaphore.release()# 釋放訊號量:訊號量加一
# 再次釋放訊號量:訊號量加一,這時超過限定的訊號量數目會報錯ValueError: Semaphore released too many times
semaphore.release()
#***************高能結束******************
for i in range(5):#建立5個執行緒
t=threading.Thread(target=run,args=(i,))
t.start()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2690003/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 畫江湖之 Go 學習篇 【訊號量】Go
- 畫江湖之 Go 學習篇 [訊號量]Go
- Python 訊號量Python
- uc/os-iii學習筆記-資源管理(中斷、訊號、訊號量、互斥訊號量)筆記
- 程式通訊之無名訊號量
- RT-Thread學習筆記2-互斥量與訊號量thread筆記
- 原始碼分析:Semaphore之訊號量原始碼
- Python執行緒專題5:訊號量與有邊界的訊號量Python執行緒
- python 之訊號SignalPython
- Linux 程式間通訊之System V 訊號量Linux
- POSIX 訊號量
- 程式間通訊——POSIX 有名訊號量與無名訊號量
- 訊號量、訊息佇列、共享記憶體複習佇列記憶體
- liteos訊號量(八)
- django的訊號量Django
- 程序間通訊(4)-訊號量
- 10. Semaphore ||(訊號量)
- 無名訊號量實現哲學家問題
- 深度學習助力引力波訊號搜尋深度學習
- Python學習之模組Python
- Python之numpy學習Python
- python之pandas學習Python
- Python之Series 學習Python
- uc/os-iii學習筆記-任務同步(訊號量、時間標誌組)筆記
- 學習筆記(2):go輕量級分散式與微服務-實現程式的訊號通訊2筆記Go分散式微服務
- Semaphore訊號量原始碼解析原始碼
- IPCS ipcrm刪除訊號量
- system -v 訊號量的使用
- Python-訊號量和執行緒池-semaphore ThreadPollPython執行緒thread
- Linux程式間通訊——使用訊號量Linux
- 【python】python 模組學習之--FabricPython
- 【python】python 模組學習之--pexpectPython
- Python學習之共享引用Python
- Python 學習之元組Python
- Python學習之set集合Python
- python學習之運算子Python
- python學習之數字Python
- Python學習之函式Python函式