import asyncio asyncio.wait_for(aw, timeout, *, loop=None)
aw
- awaitable - объект ожидания,timeout
- время, которое нужно ждать, после которого происходит отмена задачи,loop=None
- параметры цикла (удален с версии Python 3.10).Функция wait_for()
модуля asyncio
ждет, пока awaitable объект aw
завершится с таймаутом timeout
.
Если aw
является сопрограммой, то она автоматически назначается как задача.
Аргумент timeout
может иметь: значение None
, число float
или int
, выраженное в секундах, в течение которых будет приостановлена задача. Если таймаут равен None
, то происходит блокировка до завершения Future
.
Если истекает тайм-аут, то функция asyncio.wait_for()
отменяет задачу и вызывает ошибку asyncio.TimeoutError
.
Если необходимо избежать отмены задачи, то оберните ее в функцию asyncio.shield()
.
Функция asyncio.wait_for()
будет ждать до тех пор, пока объект Future
не будет фактически отменен, поэтому общее время ожидания может превысить таймаут. Если во время отмены происходит исключение, то оно распространяется на вызывающую сторону.
Если ожидание результата отменяется, то результат выполнения aw
также отменяется.
Изменено в Python 3.10: Аргумент loop
удален.
В Python 3.11 добавлен асинхронный контекстный менеджер
asyncio.timeout()
для установки тайм-аута для асинхронных операций. Для нового кода рекомендуется использоватьasyncio.timeout()
вместоasyncio.wait_for()
.
asyncio.wait_for()
:async def eternity(): # Засыпаем на 1 час await asyncio.sleep(3600) print('Ура!') async def main(): # ждем не более 1 сек. try: await asyncio.wait_for(eternity(), timeout=1.0) except asyncio.TimeoutError: print('timeout!') asyncio.run(main()) # timeout!