Semaphore和BoundedSemaphore兩個,用起來好像沒啥區別
都是定義信號量
sem=threading.BoundedSemaphore(5) sem=threading.Semaphore(5) sem.acquire() #一系列操作 sem.release()
不過BoundedSemaphore相對Semaphore更工廠一些
BoundedSemaphore在調用release()的時候,會校驗一下當前信號量的值,是否會大於初始值(只定義了5個信號量,釋放了5次后,還要調用release)的場景,會拋出異常
Semaphore released too many times
print(sem.release()) File "D:\python\lib\threading.py", line 483, in release raise ValueError("Semaphore released too many times") ValueError: Semaphore released too many times
而 Semaphore在這種場景下,release()的結果只是None,沒有返回信號量對象,並不會拋出異常
import threading
#sem=threading.BoundedSemaphore(5)
sem=threading.Semaphore(5)
global num
num=0
def run():
global num
sem.acquire()
num+=1
if num>0:
sem.release()
print(sem.release())
for i in range(20):
threading.Thread(target=run,args=()).start()
print(num)
