1 import concurrent.futures
3 from collections.abc import Awaitable, Generator, Iterable, Iterator
4 from types import FrameType
5 from typing import Any, Generic, Optional, TextIO, TypeVar, Union, overload
6 from typing_extensions import Literal
8 from .events import AbstractEventLoop
9 from .futures import Future
11 if sys.version_info >= (3, 9):
12 from types import GenericAlias
20 _FT = TypeVar("_FT", bound=Future[Any])
21 _FutureT = Union[Future[_T], Generator[Any, None, _T], Awaitable[_T]]
22 _TaskYieldType = Optional[Future[object]]
28 if sys.version_info >= (3, 10):
29 def as_completed(fs: Iterable[_FutureT[_T]], *, timeout: float | None = ...) -> Iterator[Future[_T]]: ...
33 fs: Iterable[_FutureT[_T]], *, loop: AbstractEventLoop | None = ..., timeout: float | None = ...
34 ) -> Iterator[Future[_T]]: ...
37 def ensure_future(coro_or_future: _FT, *, loop: AbstractEventLoop | None = ...) -> _FT: ... # type: ignore
39 def ensure_future(coro_or_future: Awaitable[_T], *, loop: AbstractEventLoop | None = ...) -> Task[_T]: ...
41 # Prior to Python 3.7 'async' was an alias for 'ensure_future'.
42 # It became a keyword in 3.7.
44 # `gather()` actually returns a list with length equal to the number
45 # of tasks passed; however, Tuple is used similar to the annotation for
46 # zip() because typing does not support variadic type variables. See
47 # typing PR #1550 for discussion.
48 if sys.version_info >= (3, 10):
50 def gather(coro_or_future1: _FutureT[_T1], *, return_exceptions: Literal[False] = ...) -> Future[tuple[_T1]]: ...
53 coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], *, return_exceptions: Literal[False] = ...
54 ) -> Future[tuple[_T1, _T2]]: ...
57 coro_or_future1: _FutureT[_T1],
58 coro_or_future2: _FutureT[_T2],
59 coro_or_future3: _FutureT[_T3],
61 return_exceptions: Literal[False] = ...,
62 ) -> Future[tuple[_T1, _T2, _T3]]: ...
65 coro_or_future1: _FutureT[_T1],
66 coro_or_future2: _FutureT[_T2],
67 coro_or_future3: _FutureT[_T3],
68 coro_or_future4: _FutureT[_T4],
70 return_exceptions: Literal[False] = ...,
71 ) -> Future[tuple[_T1, _T2, _T3, _T4]]: ...
74 coro_or_future1: _FutureT[_T1],
75 coro_or_future2: _FutureT[_T2],
76 coro_or_future3: _FutureT[_T3],
77 coro_or_future4: _FutureT[_T4],
78 coro_or_future5: _FutureT[_T5],
80 return_exceptions: Literal[False] = ...,
81 ) -> Future[tuple[_T1, _T2, _T3, _T4, _T5]]: ...
84 coro_or_future1: _FutureT[Any],
85 coro_or_future2: _FutureT[Any],
86 coro_or_future3: _FutureT[Any],
87 coro_or_future4: _FutureT[Any],
88 coro_or_future5: _FutureT[Any],
89 coro_or_future6: _FutureT[Any],
90 *coros_or_futures: _FutureT[Any],
91 return_exceptions: bool = ...,
92 ) -> Future[list[Any]]: ...
94 def gather(coro_or_future1: _FutureT[_T1], *, return_exceptions: bool = ...) -> Future[tuple[_T1 | BaseException]]: ...
97 coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], *, return_exceptions: bool = ...
98 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException]]: ...
101 coro_or_future1: _FutureT[_T1],
102 coro_or_future2: _FutureT[_T2],
103 coro_or_future3: _FutureT[_T3],
105 return_exceptions: bool = ...,
106 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException]]: ...
109 coro_or_future1: _FutureT[_T1],
110 coro_or_future2: _FutureT[_T2],
111 coro_or_future3: _FutureT[_T3],
112 coro_or_future4: _FutureT[_T4],
114 return_exceptions: bool = ...,
115 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException, _T4 | BaseException]]: ...
118 coro_or_future1: _FutureT[_T1],
119 coro_or_future2: _FutureT[_T2],
120 coro_or_future3: _FutureT[_T3],
121 coro_or_future4: _FutureT[_T4],
122 coro_or_future5: _FutureT[_T5],
124 return_exceptions: bool = ...,
126 tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException, _T4 | BaseException, _T5 | BaseException]
132 coro_or_future1: _FutureT[_T1], *, loop: AbstractEventLoop | None = ..., return_exceptions: Literal[False] = ...
133 ) -> Future[tuple[_T1]]: ...
136 coro_or_future1: _FutureT[_T1],
137 coro_or_future2: _FutureT[_T2],
139 loop: AbstractEventLoop | None = ...,
140 return_exceptions: Literal[False] = ...,
141 ) -> Future[tuple[_T1, _T2]]: ...
144 coro_or_future1: _FutureT[_T1],
145 coro_or_future2: _FutureT[_T2],
146 coro_or_future3: _FutureT[_T3],
148 loop: AbstractEventLoop | None = ...,
149 return_exceptions: Literal[False] = ...,
150 ) -> Future[tuple[_T1, _T2, _T3]]: ...
153 coro_or_future1: _FutureT[_T1],
154 coro_or_future2: _FutureT[_T2],
155 coro_or_future3: _FutureT[_T3],
156 coro_or_future4: _FutureT[_T4],
158 loop: AbstractEventLoop | None = ...,
159 return_exceptions: Literal[False] = ...,
160 ) -> Future[tuple[_T1, _T2, _T3, _T4]]: ...
163 coro_or_future1: _FutureT[_T1],
164 coro_or_future2: _FutureT[_T2],
165 coro_or_future3: _FutureT[_T3],
166 coro_or_future4: _FutureT[_T4],
167 coro_or_future5: _FutureT[_T5],
169 loop: AbstractEventLoop | None = ...,
170 return_exceptions: Literal[False] = ...,
171 ) -> Future[tuple[_T1, _T2, _T3, _T4, _T5]]: ...
174 coro_or_future1: _FutureT[Any],
175 coro_or_future2: _FutureT[Any],
176 coro_or_future3: _FutureT[Any],
177 coro_or_future4: _FutureT[Any],
178 coro_or_future5: _FutureT[Any],
179 coro_or_future6: _FutureT[Any],
180 *coros_or_futures: _FutureT[Any],
181 loop: AbstractEventLoop | None = ...,
182 return_exceptions: bool = ...,
183 ) -> Future[list[Any]]: ...
186 coro_or_future1: _FutureT[_T1], *, loop: AbstractEventLoop | None = ..., return_exceptions: bool = ...
187 ) -> Future[tuple[_T1 | BaseException]]: ...
190 coro_or_future1: _FutureT[_T1],
191 coro_or_future2: _FutureT[_T2],
193 loop: AbstractEventLoop | None = ...,
194 return_exceptions: bool = ...,
195 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException]]: ...
198 coro_or_future1: _FutureT[_T1],
199 coro_or_future2: _FutureT[_T2],
200 coro_or_future3: _FutureT[_T3],
202 loop: AbstractEventLoop | None = ...,
203 return_exceptions: bool = ...,
204 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException]]: ...
207 coro_or_future1: _FutureT[_T1],
208 coro_or_future2: _FutureT[_T2],
209 coro_or_future3: _FutureT[_T3],
210 coro_or_future4: _FutureT[_T4],
212 loop: AbstractEventLoop | None = ...,
213 return_exceptions: bool = ...,
214 ) -> Future[tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException, _T4 | BaseException]]: ...
217 coro_or_future1: _FutureT[_T1],
218 coro_or_future2: _FutureT[_T2],
219 coro_or_future3: _FutureT[_T3],
220 coro_or_future4: _FutureT[_T4],
221 coro_or_future5: _FutureT[_T5],
223 loop: AbstractEventLoop | None = ...,
224 return_exceptions: bool = ...,
226 tuple[_T1 | BaseException, _T2 | BaseException, _T3 | BaseException, _T4 | BaseException, _T5 | BaseException]
229 def run_coroutine_threadsafe(coro: _FutureT[_T], loop: AbstractEventLoop) -> concurrent.futures.Future[_T]: ...
231 if sys.version_info >= (3, 10):
232 def shield(arg: _FutureT[_T]) -> Future[_T]: ...
233 def sleep(delay: float, result: _T = ...) -> Future[_T]: ...
235 def wait(fs: Iterable[_FT], *, timeout: float | None = ..., return_when: str = ...) -> Future[tuple[set[_FT], set[_FT]]]: ... # type: ignore
238 fs: Iterable[Awaitable[_T]], *, timeout: float | None = ..., return_when: str = ...
239 ) -> Future[tuple[set[Task[_T]], set[Task[_T]]]]: ...
240 def wait_for(fut: _FutureT[_T], timeout: float | None) -> Future[_T]: ...
243 def shield(arg: _FutureT[_T], *, loop: AbstractEventLoop | None = ...) -> Future[_T]: ...
244 def sleep(delay: float, result: _T = ..., *, loop: AbstractEventLoop | None = ...) -> Future[_T]: ...
246 def wait(fs: Iterable[_FT], *, loop: AbstractEventLoop | None = ..., timeout: float | None = ..., return_when: str = ...) -> Future[tuple[set[_FT], set[_FT]]]: ... # type: ignore
249 fs: Iterable[Awaitable[_T]], *, loop: AbstractEventLoop | None = ..., timeout: float | None = ..., return_when: str = ...
250 ) -> Future[tuple[set[Task[_T]], set[Task[_T]]]]: ...
251 def wait_for(fut: _FutureT[_T], timeout: float | None, *, loop: AbstractEventLoop | None = ...) -> Future[_T]: ...
253 class Task(Future[_T], Generic[_T]):
254 if sys.version_info >= (3, 8):
257 coro: Generator[_TaskYieldType, None, _T] | Awaitable[_T],
259 loop: AbstractEventLoop = ...,
260 name: str | None = ...,
264 self, coro: Generator[_TaskYieldType, None, _T] | Awaitable[_T], *, loop: AbstractEventLoop = ...
266 def __repr__(self) -> str: ...
267 if sys.version_info >= (3, 8):
268 def get_coro(self) -> Generator[_TaskYieldType, None, _T] | Awaitable[_T]: ...
269 def get_name(self) -> str: ...
270 def set_name(self, __value: object) -> None: ...
271 def get_stack(self, *, limit: int | None = ...) -> list[FrameType]: ...
272 def print_stack(self, *, limit: int | None = ..., file: TextIO | None = ...) -> None: ...
273 if sys.version_info >= (3, 9):
274 def cancel(self, msg: Any | None = ...) -> bool: ...
276 def cancel(self) -> bool: ...
277 if sys.version_info < (3, 9):
279 def current_task(cls, loop: AbstractEventLoop | None = ...) -> Task[Any] | None: ...
281 def all_tasks(cls, loop: AbstractEventLoop | None = ...) -> set[Task[Any]]: ...
282 if sys.version_info < (3, 7):
283 def _wakeup(self, fut: Future[Any]) -> None: ...
284 if sys.version_info >= (3, 9):
285 def __class_getitem__(cls, item: Any) -> GenericAlias: ...
287 if sys.version_info >= (3, 7):
288 def all_tasks(loop: AbstractEventLoop | None = ...) -> set[Task[Any]]: ...
289 if sys.version_info >= (3, 8):
290 def create_task(coro: Generator[_TaskYieldType, None, _T] | Awaitable[_T], *, name: str | None = ...) -> Task[_T]: ...
292 def create_task(coro: Generator[_TaskYieldType, None, _T] | Awaitable[_T]) -> Task[_T]: ...
293 def current_task(loop: AbstractEventLoop | None = ...) -> Task[Any] | None: ...