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Сообщить о неточности