gc — Интерфейс сборщика мусора
Этот модуль предоставляет интерфейс к необязательному сборщику мусора. Он позволяет отключить сборщик, настроить частоту сбора и установить параметры отладки. Он также предоставляет доступ к недоступным объектам, которые сборщик обнаружил, но не может освободить. Поскольку сборщик дополняет подсчет ссылок, уже используемый в Python, вы можете отключить сборщик, если уверены, что ваша программа не создает циклические ссылки. Автоматический сбор можно отключить, вызвав gc.disable(). Для отладки программы с утечкой памяти вызовите gc.set_debug(gc.DEBUG_LEAK). Обратите внимание, что это включает gc.DEBUG_SAVEALL, что приводит к сохранению объектов, подлежащих сборке мусора, в gc.garbage для проверки.
Модуль gc предоставляет следующие функции:
-
gc.enable() -
Включить автоматическую сборку мусора.
-
gc.disable() -
Отключить автоматическую сборку мусора.
-
gc.isenabled() -
Возвращает
Trueесли автоматический сбор включен.
-
gc.collect(generation=2) -
Без аргументов выполняет полный сбор. Необязательный аргумент generation может быть целым числом, определяющим, какую генерацию собирать (от 0 до 2). Если номер генерации некорректный, генерируется
ValueError. Возвращается сумма собранных объектов и несобираемых объектов.Списки освобождения, поддерживаемые для ряда встроенных типов, очищаются при каждом полном сборе или сборе самой старшей генерации (2). Из-за особенностей реализации не все элементы в некоторых списках освобождения могут быть освобождены, в частности
float.Эффект вызова
gc.collect()в то время, когда интерпретатор уже выполняет сбор, не определён.
-
gc.set_debug(flags) -
Установить флаги отладки сборки мусора. Информация об отладке будет записана в
sys.stderr. Ниже приведен список флагов отладки, которые можно объединять с помощью побитовых операций для управления отладкой.
-
gc.get_debug() -
Возвращает текущие установленные флаги отладки.
-
gc.get_objects(generation=None) -
Возвращает список всех объектов, отслеживаемых сборщиком, исключая возвращённый список. Если generation не
None, возвращает только объекты, отслеживаемые сборщиком, принадлежащие к данной генерации.Изменено в версии 3.8: Добавлен параметр generation.
Вызывает событие аудита аудита
gc.get_objectsс аргументомgeneration.
-
gc.get_stats() -
Возвращает список из трёх словарей, содержащих статистику сбора по каждой генерации с момента запуска интерпретатора. Количество ключей может измениться в будущем, но сейчас каждый словарь будет содержать следующие элементы:
-
collections— количество раз, когда была собрана данная генерация; -
collected— общее количество собранных объектов в данной генерации; -
uncollectable— общее количество объектов, которые были признаны несобираемыми (и, следовательно, были перемещены в списокgarbage) в данной генерации.
Добавлен в версии 3.4.
-
-
gc.set_threshold(threshold0[, threshold1[, threshold2]]) -
Установить пороги сбора мусора (частоту сбора). Установка threshold0 в ноль отключает сбор.
Сборщик мусора классифицирует объекты в три поколения в зависимости от того, сколько циклов сбора они пережили. Новые объекты помещаются в самое молодое поколение (генерация
0). Если объект переживает сбор, он перемещается в следующее более старое поколение. Поскольку поколение2является самым старым поколением, объекты в этом поколении остаются там после сбора. Для определения момента запуска сборщик отслеживает количество выделений и освобождений объектов с момента последнего сбора. Когда количество выделений минус количество освобождений превышает threshold0, запускается сбор. Изначально проверяется только поколение0. Если поколение0было проверено более threshold1 раз с тех пор, как было проверено поколение1, тогда проверяется также поколение1. С третьим поколением всё немного сложнее, см. Сбор самого старого поколения для получения дополнительной информации.
-
gc.get_count() -
Возвращает текущие счетчики сбора в виде кортежа
(count0, count1, count2).
-
gc.get_threshold() -
Возвращает текущие пороги сбора в виде кортежа
(threshold0, threshold1, threshold2).
-
gc.get_referrers(*objs) -
Возвращает список объектов, которые напрямую ссылаются на любые из объектов objs. Эта функция будет находить только те контейнеры, которые поддерживают сбор мусора; типы расширений, которые ссылаются на другие объекты, но не поддерживают сбор мусора, не будут найдены.
Обратите внимание, что объекты, которые уже были дезактивированы, но которые находятся в циклах и еще не были собраны сборщиком мусора, могут быть перечислены среди реферрингов. Чтобы получить только текущие активные объекты, вызовите
collect()перед вызовомget_referrers().Предупреждение
При использовании объектов, возвращаемых
get_referrers(), необходимо соблюдать осторожность, так как некоторые из них могут все еще находиться в процессе создания и поэтому находиться в временно недействительном состоянии. Избегайте использованияget_referrers()для любых целей, кроме отладки.Вызывает событие аудита аудита
gc.get_referrersс аргументомobjs.
-
gc.get_referents(*objs) -
Возвращает список объектов, напрямую ссылающихся на любые из аргументов. Возвращаемые референты — это те объекты, которые посещают методы C-уровня
tp_traverseаргументов (если таковые имеются), и могут не быть всеми объектами, фактически напрямую достижимыми. Методыtp_traverseподдерживаются только объектами, которые поддерживают сбор мусора, и обязаны посещать только объекты, которые могут участвовать в цикле. Например, если целое число напрямую достижимо из аргумента, это целое число может или не может появиться в результирующем списке.Вызывает событие аудита аудита
gc.get_referentsс аргументомobjs.
-
gc.is_tracked(obj) -
Возвращает
Trueесли объект в настоящее время отслеживается сборщиком мусора,Falseв противном случае. Как правило, экземпляры атомных типов не отслеживаются, а экземпляры неатомных типов (контейнеры, пользовательские объекты...) — отслеживаются. Однако могут быть некоторые оптимизации, специфичные для типа, для подавления отпечатков сборщика мусора простых экземпляров (например, словарей, содержащих только атомные ключи и значения):>>> gc.is_tracked(0) False >>> gc.is_tracked("a") False >>> gc.is_tracked([]) True >>> gc.is_tracked({}) False >>> gc.is_tracked({"a": 1}) False >>> gc.is_tracked({"a": []}) TrueДобавлен в версии 3.1.
-
gc.is_finalized(obj) -
Возвращает
Trueесли данный объект был завершен сборщиком мусора,Falseв противном случае.>>> x = None >>> class Lazarus: ... def __del__(self): ... global x ... x = self ... >>> lazarus = Lazarus() >>> gc.is_finalized(lazarus) False >>> del lazarus >>> gc.is_finalized(x) True
Добавлен в версии 3.9.
-
gc.freeze() -
Заморозить все объекты, отслеживаемые сборщиком мусора; переместить их в постоянную генерацию и игнорировать их во всех будущих сборах.
Если процесс будет
fork()безexec(), избегая ненужного копирования при записи в дочерних процессах, будет максимизировано использование общей памяти и уменьшен общий объём потребления памяти. Это требует как избежания создания освобождённых «дыр» в страницах памяти в родительском процессе, так и обеспечения того, что сборки мусора в дочерних процессах не будут затрагивать счётчикgc_refsдолгоживущих объектов, возникших в родительском процессе. Для достижения обоих этих целей, вызовитеgc.disable()в начале родительского процесса,gc.freeze()непосредственно передfork(), иgc.enable()в начале дочерних процессов.Добавлен в версии 3.7.
-
gc.unfreeze() -
Разморозить объекты в постоянной генерации, вернуть их в самое старое поколение.
Добавлен в версии 3.7.
-
gc.get_freeze_count() -
Возвращает количество объектов в постоянной генерации.
Добавлен в версии 3.7.
Следующие переменные предоставляются для чтения только для доступа (вы можете изменять значения, но не должны перепривязывать их):
-
gc.garbage -
Список объектов, которые сборщик обнаружил недостижимыми, но не смог освободить (объекты, не подлежащие сборке мусора). Начиная с Python 3.4, этот список должен быть пустым в большинстве случаев, за исключением случаев использования экземпляров типов расширений C с не-
NULLtp_delслотом.Если установлен
DEBUG_SAVEALL, все недостижимые объекты будут добавлены в этот список вместо освобождения.Изменено в версии 3.2: Если этот список не пуст при выключении интерпретатора, генерируется
ResourceWarning, который по умолчанию не выдаёт предупреждений. Если установленDEBUG_UNCOLLECTABLE, дополнительно выводятся все объекты, не подлежащие сборке мусора.Изменено в версии 3.4: В соответствии с PEP 442, объекты с методом
__del__()больше не попадают вgc.garbage.
-
gc.callbacks -
Список обратных вызовов, которые будут вызываться сборщиком мусора до и после сбора мусора. Обратные вызовы будут вызываться с двумя аргументами, фазой и информацией.
Фаза может принимать одно из двух значений:
“start”: Сбор мусора начался.
“stop”: Сбор мусора завершён.
Информация — это словарь, предоставляющий более подробную информацию для обратного вызова. В настоящее время определены следующие ключи:
“generation”: Самая старая собираемая генерация.
“collected”: Когда фаза равна “stop”, количество успешно собранных объектов.
“uncollectable”: Когда фаза равна “stop”, количество объектов, которые не удалось собрать и которые были помещены в
garbage.Приложения могут добавлять свои собственные обратные вызовы в этот список. Основные случаи использования:
Сбор статистики о сборке мусора, например, о частоте сбора различных поколений и продолжительности сбора.
Возможность для приложений идентифицировать и очищать собственные несобираемые типы, когда они появляются в
garbage.Добавлен в версии 3.3.
Следующие константы предназначены для использования с set_debug():
-
gc.DEBUG_STATS -
Печать статистики во время сбора. Эта информация может быть полезна при настройке частоты сбора.
-
gc.DEBUG_COLLECTABLE -
Печать информации о собираемых объектах, обнаруженных.
-
gc.DEBUG_UNCOLLECTABLE -
Вывод информации о несобираемых объектах, обнаруженных (объекты, которые недостижимы, но не могут быть освобождены сборщиком). Эти объекты будут добавлены в список
garbage.Изменено в версии 3.2: Также выводится содержимое списка
garbageпри выключении интерпретатора, если он не пуст.
-
gc.DEBUG_SAVEALL -
При установке все обнаруженные недостижимые объекты добавляются в garbage вместо освобождения. Это может быть полезно для отладки программы с утечкой памяти.
-
gc.DEBUG_LEAK -
Флаги отладки, необходимые для сборщика для вывода информации о программе с утечкой памяти (равны
DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL).
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/gc.html