Python 3.11+Асинхронное программированиефункция
asyncio.timeout_at()
тайм-ауты
Как asyncio.timeout(), но принимает абсолютный момент по часам цикла событий, а не длительность.
Синтаксис
async with asyncio.timeout_at(when): ...
Момент считается по loop.time() — монотонным часам цикла, а не по time.time(): передать сюда отметку Unix-времени значит получить срок через десятки лет или уже истёкший. Удобна, когда один дедлайн делят несколько шагов: вычислили deadline = loop.time() + 5 один раз и передаёте его дальше. Появилась в 3.11.
Примеры
import asyncio
async def main():
loop = asyncio.get_running_loop()
deadline = loop.time() + 0.02 # часы цикла, не time.time()
try:
async with asyncio.timeout_at(deadline):
await asyncio.sleep(0.01)
print('шаг 1')
await asyncio.sleep(1)
except TimeoutError:
print('дедлайн')
asyncio.run(main()) # → шаг 1 / дедлайн
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности