Skip to content
13 changes: 13 additions & 0 deletions Lib/asyncio/timeouts.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,31 @@ class _State(enum.Enum):

@final
class Timeout:
"""Asynchronous context manager for cancelling overdue coroutines.

Note: this class is not intended to be directly used, please use
the `timeout` and `timeout_at` functions below instead.
"""

def __init__(self, when: Optional[float]) -> None:
"""Schedule a timeout that will trigger at a given loop time.

- If `when` is `None`, the timeout will never trigger.
- If `when < loop.time()`, the timeout will trigger on the next
iteration of the event loop.
"""
self._state = _State.CREATED

self._timeout_handler: Optional[events.TimerHandle] = None
self._task: Optional[tasks.Task] = None
self._when = when

def when(self) -> Optional[float]:
"""Return the current deadline."""
return self._when

def reschedule(self, when: Optional[float]) -> None:
"""Reschedule the timeout."""
assert self._state is not _State.CREATED
if self._state is not _State.ENTERED:
raise RuntimeError(
Expand Down