Asyncio ждет TimerHandle

1

Кажется, что TimerHandle не ждет. Что является предпочтительным способом дождаться, когда все обратные вызовы будут запланированы с использованием asyncio.call_later если у меня будет все TimerHandle.

  • 0
    Кажется, это излишнее (или, по крайней мере, слишком сложное), но я использую asyncio.Event который я asyncio.Event , когда вызываю call_later и устанавливаю в callback. И затем я жду пока какое-нибудь обработчик (очистка события до события event.wait ).
  • 0
    Вы можете использовать asyncio.Future (полученный с помощью loop.create_future() для той же цели. Он более легкий, чем событие, и может содержать объект в качестве полезной нагрузки или даже исключение.
Показать ещё 4 комментария
Теги:
python-asyncio

1 ответ

1

Хорошо, я рассмотрел, как реализован asyncio.sleep и выясняется, что он создает внутреннее Future и запускает call_later. Поэтому, основываясь на этом, я пришел к выводу, что лучшим вариантом будет создание сопрограммы и ее использование следующим образом:

async def set_timer(seconds):
    await asyncio.sleep(seconds)
    do_something_important()

timer_task = asyncio.ensure_future(set_timer(10))
timers.append(timer_task)
...
await asyncio.gather(*timers)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню