Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.TimerHandle

event loop

Handle отложенного вызова: его возвращают loop.call_later() и loop.call_at(). Метод when() говорит, на какое время цикла вызов назначен.

Синтаксис

handle = loop.call_later(delay, callback, *args)  # handle.when(), handle.cancel()

when() возвращает не секунды до вызова и не время по часам, а отметку loop.time() — монотонных часов цикла, у которых ноль ничему не соответствует; задержка — это handle.when() - loop.time(). Отменять ненужный таймер стоит явно: иначе колбэк сработает даже после того, как ждавшая его корутина ушла дальше. Для «подождать и продолжить» в корутине таймеры не нужны — достаточно await asyncio.sleep().

Примеры

import asyncio
async def main():
    loop = asyncio.get_running_loop()
    h = loop.call_later(10, print, 'не дождёмся')
    print(type(h).__name__)  # → TimerHandle
    print(round(h.when() - loop.time()))  # → 10 — секунд до вызова
    h.cancel()
    print(h.cancelled())  # → True
    await asyncio.sleep(0.01)
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности