Я знаю что:
- мне нужно привязываться к сигналам (
Код: Выделить всё
SIGINTВ выключенном состоянии:
- мне нужно получить все задачи (
Код: Выделить всё
asyncio.all_tasks()- Закройте соединение и выполните дополнительную очистку.
-loop.shutdown_asyncgens()
- Остановите цикл.
Проблема в том, что если я получу все задачи, это может повлиять, например, на задачи, используемые внутри библиотеки (например, aiokafka), а при ожидании отмены задач это может повлиять застревает в бесконечном ожидании.
Если я закрою соединение до того, как задачи будут завершены, это нормально, но проблема в том, что если я закрою соединение до того, как все задачи будут отменены, задачи не смогут корректно завершиться.
У меня следующие вопросы:
- Единственный ли вариант — вручную собрать все задачи и отменить их?
- И, например, если у меня есть TaskGroup, мне следует завершить ее конкретно или ее подзадачи?
- И, похоже, есть проблема с циклом.set_Exception_handler, который должен просто вызывать выключение, иначе задачи тоже могут зависнуть, я правильно понимаю?
Я также видел, что есть вариант с выключением_event, но я не думаю, что он подойдет, потому что если у меня есть задачи, которые используют await очередь.get(), они могут застрять.
Подробнее здесь: https://stackoverflow.com/questions/798 ... l-shutdown
Мобильная версия