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)