You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It would be useful to be able to access the value of threading.Semaphore._value as part of the public API of Semaphore, say via a get_value method.
Pitch
The value is useful for debugging and testing, helping users to understand the state and invariants of their code. There is also educational value in allowing users to see the internal state of a Semaphore, seeing as how it's an important concurrency primitive.
asyncio.locks.Semaphore has a locked method that exposes whether the value of the Semaphore is zero. It does appear that many of the uses are comparing the value to zero, so adding a locked method to threading.Semaphore would be sufficient for a lot of usage.
While writing this issue, I noticed that in 3.11, threading.Semaphore has its value printed in __repr__ (changed in #20534, the bpo mentions "expose their public states" as the rationale)
It looks like multiprocesing.Semaphore has an undocumented get_value method (although there is an issue about potentially removing it #84974 )
The text was updated successfully, but these errors were encountered:
I've had occasion to use this multiple times. We already have _value for
asyncio.locks.Semaphore See also
python/cpython#93213
Co-authored-by: hauntsaninja <>
Feature or enhancement
It would be useful to be able to access the value of
threading.Semaphore._value
as part of the public API ofSemaphore
, say via aget_value
method.Pitch
The value is useful for debugging and testing, helping users to understand the state and invariants of their code. There is also educational value in allowing users to see the internal state of a Semaphore, seeing as how it's an important concurrency primitive.
https://cs.github.com/?scopeName=All+repos&scope=&q=semaphore._value+language%3Apython# finds 68 uses of the exact phrase "semaphore._value" on Github, so I'm not alone in wanting access to this (although several of these are
asyncio.locks.Semaphore
).Previous discussion
asyncio.locks.Semaphore
has alocked
method that exposes whether the value of the Semaphore is zero. It does appear that many of the uses are comparing the value to zero, so adding alocked
method tothreading.Semaphore
would be sufficient for a lot of usage.While writing this issue, I noticed that in 3.11,
threading.Semaphore
has its value printed in__repr__
(changed in #20534, the bpo mentions "expose their public states" as the rationale)It looks like
multiprocesing.Semaphore
has an undocumentedget_value
method (although there is an issue about potentially removing it #84974 )The text was updated successfully, but these errors were encountered: