pyhton 信號量Semaphore和BoundedSemaphore


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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM