Skip to content

gh-141196: Fix threading.Semaphore documentation inconsistency - #141243

Closed
mohsinm-dev wants to merge 3 commits into
python:mainfrom
mohsinm-dev:fix-gh-141196-semaphore-docs
Closed

gh-141196: Fix threading.Semaphore documentation inconsistency#141243
mohsinm-dev wants to merge 3 commits into
python:mainfrom
mohsinm-dev:fix-gh-141196-semaphore-docs

Conversation

@mohsinm-dev

@mohsinm-devmohsinm-dev commented Nov 8, 2025

Copy link
Copy Markdown
Contributor

Summary

Fixes issue #141196 by correcting inconsistent documentation in threading.Semaphore.

Problem

The acquire() method documentation stated "Exactly one thread will be awoken by each call to release()" which became incorrect when the n parameter was added to release() in Python 3.9.

Solution

  • Updated acquire() docs to reflect that release(n) wakes min(j,n) threads where j = waiting threads
  • Clarified release() docs to specify "up to n threads" are awakened

Implementation

The fix aligns documentation with actual behavior: Semaphore.release(n) calls Condition.notify(n), which wakes exactly min(n, waiting_threads) threads.

Testing

Verified with test cases:

  • release() → 1 thread woken
  • release(2) with 3 waiting → 2 threads woken
  • release(5) with 2 waiting → 2 threads woken

Documentation-only change, no code modifications required.


📚 Documentation preview 📚: https://cpython-previews--141243.org.readthedocs.build/

Changed "Objects of different types, except different numeric types, never
compare equal" to "Objects of different types, unless documented otherwise,
never compare equal" to account for documented exceptions like set/frozenset
comparisons.
The acquire() method documentation stated 'Exactly one thread will be awoken
by each call to release()' which became incorrect when the n parameter was
added to release() in Python 3.9.
The release() method documentation was ambiguous about behavior when
n > waiting_threads.
Changes:
- acquire(): Updated to reflect that release(n) wakes min(j,n) threads
where j = waiting threads
- release(): Clarified that it wakes 'up to n' threads, or all available
if fewer than n are waiting
The fix aligns documentation with actual implementation behavior in
Lib/threading.py where release(n) calls Condition.notify(n).
@bedevere-appbedevere-appBot added awaiting review docs Documentation in the Doc dir skip news labels Nov 8, 2025
@mohsinm-dev
mohsinm-dev deleted the fix-gh-141196-semaphore-docs branch November 8, 2025 13:28
@mohsinm-dev
mohsinm-dev restored the fix-gh-141196-semaphore-docs branch November 8, 2025 13:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting reviewdocsDocumentation in the Doc dirskip news

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

1 participant

@mohsinm-dev