Сообщить об ошибке.

Функция wait_for() модуля asyncio в Python.

Установка тайм-аута для отмены задачи.

Синтаксис:

import asyncio

asyncio.wait_for(aw, timeout, *, loop=None)

Параметры:

  • aw - awaitable - объект ожидания,
  • timeout - время, которое нужно ждать, после которого происходит отмена задачи,
  • loop=None - параметры цикла.

Описание:

Функция 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.8 аргумент loop устарел и не рекомендуется к использованию, будет удален в Python 3.10.

Примеры использования 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!