У меня есть следующий код:
@asyncio.coroutine
def do_something_periodically():
while True:
asyncio.async(my_expensive_operation())
yield from asyncio.sleep(my_interval)
if shutdown_flag_is_set:
print("Shutting down")
break
Я запускаю эту функцию до завершения. Проблема возникает, когда выключение установлено - функция завершается, и все ожидающие задачи никогда не запускаются. (Вы видите это как ошибку
task: <Task pending coro=<report() running at script.py:33> wait_for=<Future pending cb=[Task._wakeup()]>>
). Как правильно запланировать выключение?
Чтобы дать некоторый контекст, я пишу системный монитор, который читает из /proc/stat каждые 5 секунд, вычисляет использование процессора в этот период и затем отправляет результат на сервер. Я хочу продолжать планировать эти задания мониторинга до тех пор, пока не получу сигтерм, когда остановлюсь на планировании, дождитесь завершения всех текущих заданий и изящного выхода.