Кажется, что TimerHandle
не ждет. Что является предпочтительным способом дождаться, когда все обратные вызовы будут запланированы с использованием asyncio.call_later
если у меня будет все TimerHandle
.
Хорошо, я рассмотрел, как реализован 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)
asyncio.Event
который яasyncio.Event
, когда вызываюcall_later
и устанавливаю в callback. И затем я жду пока какое-нибудь обработчик (очистка события до событияevent.wait
).asyncio.Future
(полученный с помощьюloop.create_future()
для той же цели. Он более легкий, чем событие, и может содержать объект в качестве полезной нагрузки или даже исключение.