diff --git a/stdlib/multiprocessing/__init__.pyi b/stdlib/multiprocessing/__init__.pyi index 161cc72c27d8..c8f9e2c654bc 100644 --- a/stdlib/multiprocessing/__init__.pyi +++ b/stdlib/multiprocessing/__init__.pyi @@ -15,7 +15,9 @@ from multiprocessing.context import ( from multiprocessing.managers import SyncManager from multiprocessing.process import active_children as active_children, current_process as current_process -# These are technically functions that return instances of these Queue classes. See #4313 for discussion +# These are technically functions that return instances of these Queue classes. +# Using them as annotations is deprecated. Either use imports from +# multiprocessing.queues or the aliases defined below. See #4266 for discussion. from multiprocessing.queues import JoinableQueue as JoinableQueue, Queue as Queue, SimpleQueue as SimpleQueue from multiprocessing.spawn import freeze_support as freeze_support from typing import Any, Optional, Union, overload @@ -27,6 +29,26 @@ if sys.version_info >= (3, 8): if sys.platform != "win32": from multiprocessing.context import ForkContext, ForkServerContext +# The following type aliases can be used to annotate the return values of +# the corresponding functions. They are not defined at runtime. +# +# from multiprocessing import Lock +# from typing import TYPE_CHECKING +# if TYPE_CHECKING: +# from multiprocessing import _LockType +# lock: _LockType = Lock() + +_QueueType = Queue +_SimpleQueueType = SimpleQueue +_JoinableQueueType = JoinableQueue +_BarrierType = synchronize.Barrier +_BoundedSemaphoreType = synchronize.BoundedSemaphore +_ConditionType = synchronize.Condition +_EventType = synchronize.Event +_LockType = synchronize.Lock +_RLockType = synchronize.RLock +_SemaphoreType = synchronize.Semaphore + # N.B. The functions below are generated at runtime by partially applying # multiprocessing.context.BaseContext's methods, so the two signatures should # be identical (modulo self). @@ -38,13 +60,13 @@ RawArray = context._default_context.RawArray Value = context._default_context.Value Array = context._default_context.Array -def Barrier(parties: int, action: Optional[Callable[..., Any]] = ..., timeout: Optional[float] = ...) -> synchronize.Barrier: ... -def BoundedSemaphore(value: int = ...) -> synchronize.BoundedSemaphore: ... -def Condition(lock: Optional[_LockLike] = ...) -> synchronize.Condition: ... -def Event() -> synchronize.Event: ... -def Lock() -> synchronize.Lock: ... -def RLock() -> synchronize.RLock: ... -def Semaphore(value: int = ...) -> synchronize.Semaphore: ... +def Barrier(parties: int, action: Optional[Callable[..., Any]] = ..., timeout: Optional[float] = ...) -> _BarrierType: ... +def BoundedSemaphore(value: int = ...) -> _BoundedSemaphoreType: ... +def Condition(lock: Optional[_LockLike] = ...) -> _ConditionType: ... +def Event() -> _EventType: ... +def Lock() -> _LockType: ... +def RLock() -> _RLockType: ... +def Semaphore(value: int = ...) -> _SemaphoreType: ... def Pipe(duplex: bool = ...) -> tuple[connection.Connection, connection.Connection]: ... def Pool( processes: Optional[int] = ...,