Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.
Что такое Task Leak (утечка задач) в асинхронном Python? Как незакрытая или зависшая корутина может привести к скрытой утечке памяти и как это отследить в работающем приложении?
Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Task leak — накопление незавершённых asyncio-задач, которые удерживают корутины, локальные переменные и ресурсы. Частые причины — забытые фоновые задачи и ожидание без завершения.
Отслеживайте количество активных задач и возраст самых старых, сравнивайте снимки asyncio.all_tasks() и их стеков, сопоставляйте рост памяти с нагрузкой. Именование задач помогает установить источник.
У каждой фоновой задачи должен быть владелец: он наблюдает результат, ограничивает время и при остановке отменяет задачу, затем дожидается завершения. Используйте структурированное управление задачами и finally для ресурсов. Просто созданная, но не запущенная корутина и бесконечно работающая Task — разные ошибки. Не выводите в диагностические логи локальные переменные с пользовательскими данными.