Skip to content

Commit

Permalink
improve identity of threading module's Lock and RLock (python#12966)
Browse files Browse the repository at this point in the history
  • Loading branch information
tungol authored Dec 28, 2024
1 parent eb8af63 commit 801c5c9
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 25 deletions.
1 change: 0 additions & 1 deletion stdlib/@tests/stubtest_allowlists/common.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ turtledemo\..+
# TODO: Module members that exist at runtime, but are missing from stubs
# ======================================================================

_thread.RLock
tkinter.Misc.config


Expand Down
40 changes: 30 additions & 10 deletions stdlib/_thread.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,11 @@ error = RuntimeError

def _count() -> int: ...
@final
class LockType:
class RLock:
def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release(self) -> None: ...
def locked(self) -> bool: ...
def acquire_lock(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release_lock(self) -> None: ...
def locked_lock(self) -> bool: ...
def __enter__(self) -> bool: ...
def __exit__(
self, type: type[BaseException] | None, value: BaseException | None, traceback: TracebackType | None
) -> None: ...
__enter__ = acquire
def __exit__(self, t: type[BaseException] | None, v: BaseException | None, tb: TracebackType | None) -> None: ...

if sys.version_info >= (3, 13):
@final
Expand All @@ -37,7 +31,33 @@ if sys.version_info >= (3, 13):
def start_joinable_thread(
function: Callable[[], object], handle: _ThreadHandle | None = None, daemon: bool = True
) -> _ThreadHandle: ...
lock = LockType
@final
class lock:
def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release(self) -> None: ...
def locked(self) -> bool: ...
def acquire_lock(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release_lock(self) -> None: ...
def locked_lock(self) -> bool: ...
def __enter__(self) -> bool: ...
def __exit__(
self, type: type[BaseException] | None, value: BaseException | None, traceback: TracebackType | None
) -> None: ...

LockType = lock
else:
@final
class LockType:
def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release(self) -> None: ...
def locked(self) -> bool: ...
def acquire_lock(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release_lock(self) -> None: ...
def locked_lock(self) -> bool: ...
def __enter__(self) -> bool: ...
def __exit__(
self, type: type[BaseException] | None, value: BaseException | None, traceback: TracebackType | None
) -> None: ...

@overload
def start_new_thread(function: Callable[[Unpack[_Ts]], object], args: tuple[Unpack[_Ts]], /) -> int: ...
Expand Down
20 changes: 6 additions & 14 deletions stdlib/threading.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -100,30 +100,22 @@ class Thread:
class _DummyThread(Thread):
def __init__(self) -> None: ...

@final
class Lock:
def __enter__(self) -> bool: ...
def __exit__(
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
) -> None: ...
def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ...
def release(self) -> None: ...
def locked(self) -> bool: ...
def acquire_lock(self, blocking: bool = ..., timeout: float = ...) -> bool: ... # undocumented
def release_lock(self) -> None: ... # undocumented
def locked_lock(self) -> bool: ... # undocumented
# This is actually the function _thread.allocate_lock for <= 3.12
Lock = _thread.LockType

# Python implementation of RLock.
@final
class _RLock:
_count: int
def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: ...
def release(self) -> None: ...
__enter__ = acquire
def __exit__(self, t: type[BaseException] | None, v: BaseException | None, tb: TracebackType | None) -> None: ...

RLock = _RLock
RLock = _thread.RLock # Actually a function at runtime.

class Condition:
def __init__(self, lock: Lock | _RLock | None = None) -> None: ...
def __init__(self, lock: Lock | _RLock | RLock | None = None) -> None: ...
def __enter__(self) -> bool: ...
def __exit__(
self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
Expand Down

0 comments on commit 801c5c9

Please sign in to comment.