Что такое Task Leak (утечка задач) в асинхронном Python? Как незакрытая или зависшая корутина может привести к скрытой утечке памяти и как это отследить в работающем приложении?

Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.

Короткий ответ

Что ответить на собеседовании

Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.

Подробный разбор

Ответ с пояснениями

Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.

Отслеживайте количество активных задач и возраст самых старых, сравнивайте снимки asyncio.all_tasks() и их стеков, сопоставляйте рост памяти с нагрузкой. Именование задач помогает установить источник.

У каждой фоновой задачи должен быть владелец: он наблюдает результат, ограничивает время и при остановке отменяет задачу, затем дожидается завершения. Используйте структурированное управление задачами и finally для ресурсов. Просто созданная, но не запущенная корутина и бесконечно работающая Task — разные ошибки. Не выводите в диагностические логи локальные переменные с пользовательскими данными.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее