Вступить в клуб →
сложнаявопросPython и асинхронность

Воркер не останавливается при выключении сервиса и убивается по таймауту

async def consume_forever():
    while True:
        try:
            message = await queue.get()
            await handle(message)
        except BaseException:
            logger.exception("ошибка обработки, продолжаем")

При остановке сервиса приложение вызывает task.cancel() для этой задачи, но процесс не завершается, пока оркестратор не убьёт его принудительно. Почему?

  • CancelledError ловится как обычная ошибка, и цикл продолжает работать
  • task.cancel() не действует на задачи, которые ждут queue.get()
  • Отмену надо ждать через await task, а приложение этого не сделало
  • logger.exception блокирует цикл событий, и отмена не доходит

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела