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 в ноль отключает сбор.
GC классифицирует объекты в три поколения в зависимости от того, сколько циклов сбора они пережили. Новые объекты помещаются в самое молодое поколение (поколение
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) -
Возвращает список объектов, на которые напрямую ссылаются любые из аргументов. Возвращаемые объекты — это те объекты, которые посещаются методами
tp_traverseаргументов на уровне C (если таковые имеются), и это могут быть не все объекты, реально доступные напрямую. Методы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 в дочерних процессах не будут трогать счётчик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.12/library/gc.html