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.set_debug(flags)¶ Установите флаги отладки сборки мусора. Отладочная информация будет записана в
sys.stderr. Ниже приведен список флагов отладки, которые можно объединить с помощью битовых операций для управления отладкой.
-
gc.get_debug()¶ Возвращает в настоящее время установлены флаги отладки.
-
gc.get_objects(generation=None)¶ Возвращает список всех объектов, отслеживаемых коллектором, за исключением возвращенного списка. Если generation не является None, возвращает only объекты, отслеживаемые коллектором, которые находятся в этом поколении.
Изменено в версии 3.8: Новый параметр 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)¶ Возвращает список объектов, непосредственно относящихся к любому из объектов. Эта функция позволяет найти только те контейнеры, которые поддерживают сбор мусора; типы расширений, которые ссылаются на другие объекты, но не поддерживают сборку мусора, не будут найдены.
Обратите внимание, что объекты, которые уже были отозваны, но которые живут циклами и еще не были собраны сборщиком мусора, могут быть перечислены среди полученных ссылок. Чтобы получить только текущие живые объекты, вызовите
collect()перед вызовомget_referrers().Предупреждение
Необходимо соблюдать осторожность, используя возвращенныйby
get_referrers()объектов, потому что некоторые из них могли все еще находиться в работе и следовательно во временно недействительном состояние. Избегайте использованияget_referrers()для каких-либо целей, кроме отладки.
-
gc.get_referents(*objs)¶ Возвращает список объектов, на которые непосредственно ссылается любой из аргументов. возвращенныйare референтов те объекты, которые посещают методы аргументов уровня-C
tp_traverse(если таковые имеются), и, могут не быть всеми объектами на самом деле непосредственно достижимые.tp_traverseметоды, поддержаны только объектами, которые поддерживают сборку мусора и только требуются, чтобы посещать объекты, которые могут быть вовлечены в цикл. Так, например, если целое число непосредственно доступно из аргумента, то этот целый объект может появиться или не появиться в списке результатов.
-
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.freeze()¶ Заморозить все объекты, отслеживаемые gc - переместить их в постоянное поколение и игнорировать все будущие коллекции. Это может быть используемый, прежде чем вилка POSIX () будет звонить, чтобы сделать GC copy-write дружелюбным или ускорить коллекцию. Также сбор перед вызовом POSIX fork () может освободить страницы для будущего выделения, что может вызвать копирование при записи, поэтому рекомендуется отключить gc в родительском процессе и заморозить перед вилкой и включить gc в дочернем процессе.
Добавлено в версии 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¶ Список колбэков, который будет призван сборщиком мусора прежде и после коллекции. Вызов колбэков будет осуществляться с двумя аргументами: phase и info.
phase может быть одним из двух значения:
«start»: выполняется запуск сборки мусора.
«stop»: сборка мусора завершена.
info является словарь, предоставляющим дополнительную информацию для колбэк. В настоящее время определены следующие ключи:
«Поколение» - самое старое из собранных поколений.
«собранный»: когда phase - «остановка», количество объектов, успешно собранных.
«безнадежный в отношении оплаты»: когда phase - «остановка», количество объектов, которые не могли быть собраны и были помещены в
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).
