python 訊號量 python學習之訊號量

2021-10-13 09:43:15 字數 1617 閱讀 2184

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()

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...

python 程序訊號量

1 概念 訊號量和鎖相似,鎖同一時間只允許乙個物件 程序 通過,訊號量同一時間允許多個物件 程序 通過 2 應用場景 多執行緒,並規定數量 3 格式 匯入訊號量模組 例項化訊號量物件,可以規定訊號量的個數 傳遞物件 拿到一把鑰匙 釋放一把鑰匙 4 過程 獲得鑰匙,當鑰匙串沒鑰匙時,其它程序要在外面等...

訊號量 二值訊號量

訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...