Frame хранит контекст выполнения функции, включая ссылки на локальные объекты и вызывающий кадр. Сохранённые traceback или frame могут удерживать большой граф объектов и циклы ссылок.
Как работает механизм Frame Objects и почему удержание ссылок на них вызывает утечки памяти?
Frame хранит контекст выполнения функции, включая ссылки на локальные объекты и вызывающий кадр. Сохранённые traceback или frame могут удерживать большой граф объектов и циклы ссылок.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Frame хранит контекст выполнения функции, включая ссылки на локальные объекты и вызывающий кадр. Сохранённые traceback или frame могут удерживать большой граф объектов и циклы ссылок.
Например, локальная переменная с результатом inspect.currentframe() может замкнуть цикл через собственный кадр. Пока на frame или traceback есть внешняя ссылка, связанные объекты остаются достижимыми и сборщик не обязан их освобождать. Для диагностики лучше сохранять форматированное описание, а не живые кадры с данными запроса. Временные ссылки удаляют в finally; кадры завершённого выполнения при необходимости очищают через frame.clear(). Не следует очищать исполняемый кадр. Часто это удержание объектов, а не необратимая утечка allocator.
Источник: docs.python.org.