Воркер не останавливается при выключении сервиса и убивается по таймауту
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 блокирует цикл событий, и отмена не доходит
