Spec-Zone.ru › Python 2.7

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])

Без аргументов выполняет полный сбор. Необязательный аргумент generation может быть целым числом, указывающим, какую генерацию собирать (от 0 до 2). Если номер генерации некорректен, поднимается исключение ValueError. Возвращается количество найденных недостижимых объектов.

Изменено в версии 2.5: Добавлен необязательный аргумент generation.

Изменено в версии 2.6: Списки свободных объектов, поддерживаемые для ряда встроенных типов, очищаются всякий раз, когда выполняется полный сбор или сбор старшей генерации (2). Не все элементы в некоторых списках свободных объектов могут быть освобождены из-за особенностей реализации, в частности int и float.

gc.set_debug(flags)

Установить флаги отладки сборки мусора. Информация об отладке будет записана в sys.stderr. Ниже приведен список флагов отладки, которые можно комбинировать с помощью побитовых операций для управления отладкой.

gc.get_debug()

Возвращает текущие флаги отладки.

gc.get_objects()

Возвращает список всех объектов, отслеживаемых сборщиком, исключая возвращённый список.

Введено в версии 2.2.

gc.set_threshold(threshold0[, threshold1[, threshold2]])

Установить пороги сборки мусора (частоту сбора). Установка threshold0 в ноль отключает сбор.

Сборщик классифицирует объекты по трём поколениям в зависимости от того, сколько циклов сбора они пережили. Новые объекты помещаются в самое молодое поколение (генерация 0). Если объект переживает сбор, он перемещается в следующее более старое поколение. Так как генерация 2 является самым старым поколением, объекты в этой генерации остаются там после сбора. Чтобы решить, когда запускать сбор, сборщик отслеживает количество выделений и освобождений объектов с момента последнего сбора. Когда количество выделений минус количество освобождений превышает threshold0, начинается сбор. Изначально рассматривается только поколение 0 . Если поколение 0 было просмотрено более threshold1 раз с тех пор, как было просмотрено поколение 1, то рассматривается и поколение 1 . Аналогично, threshold2 контролирует количество сборок поколения 1 перед сбором поколения 2.

gc.get_count()

Возвращает текущие счётчики сбора как кортеж (count0, count1, count2).

Введено в версии 2.5.

gc.get_threshold()

Возвращает текущие пороги сбора как кортеж (threshold0, threshold1, threshold2).

gc.get_referrers(*objs)

Возвращает список объектов, которые напрямую ссылаются на любой из объектов objs. Эта функция будет находить только те контейнеры, которые поддерживают сбор мусора; типы расширений, которые ссылаются на другие объекты, но не поддерживают сбор мусора, не будут найдены.

Обратите внимание, что объекты, которые уже были дессыланы, но существуют в циклах и ещё не были собраны сборщиком мусора, могут быть перечислены среди результативных referrers. Чтобы получить только текущие живые объекты, вызовите collect() перед вызовом get_referrers().

Необходимо соблюдать осторожность при использовании объектов, возвращаемых get_referrers(), потому что некоторые из них могут ещё создаваться и, следовательно, находиться в временно недопустимом состоянии. Избегайте использования get_referrers() для целей, отличных от отладки.

Введено в версии 2.2.

gc.get_referents(*objs)

Возвращает список объектов, напрямую ссылающихся на любые из аргументов. Возвращаемые referents — это те объекты, которые посещаются методами аргументов C-уровня tp_traverse (если таковые имеются), и могут не быть всеми объектами, фактически непосредственно достижимыми. Методы tp_traverse поддерживаются только объектами, которые поддерживают сбор мусора, и требуют посещения только тех объектов, которые могут участвовать в цикле. Так, например, если целое число напрямую достижимо из аргумента, то этот объект целого числа может или не может появиться в списке результатов.

Введено в версии 2.3.

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

Введено в версии 2.7.

Переменная, предоставляемая для чтения (вы можете изменить её значение, но не переназначать):

gc.garbage

Список объектов, которые сборщик обнаружил как недостижимые, но которые не удалось освободить (несобираемые объекты). По умолчанию этот список содержит только объекты с методами __del__(). 1 Объекты, у которых есть методы __del__() и которые являются частью циклической ссылки, вызывают несобираемость всего цикла ссылок, включая объекты, необязательно входящие в цикл, но достижимые только из него. Python не собирает такие циклы автоматически, так как, вообще говоря, Python не может угадать безопасный порядок запуска методов __del__(). Если вы знаете безопасный порядок, вы можете принудительно выполнить это, проверив список garbage и явно прервав циклы из-за ваших объектов в этом списке. Обратите внимание, что эти объекты остаются активными даже благодаря тому, что они находятся в списке garbage, поэтому их также следует удалить из garbage. Например, после прерывания циклов выполните del gc.garbage[:] , чтобы очистить список. Обычно лучше избегать проблемы, не создавая циклов, содержащих объекты с методами __del__(), и в этом случае можно проверить garbage, чтобы убедиться, что такие циклы не создаются.

Если установлен DEBUG_SAVEALL, то все недостижимые объекты будут добавлены в этот список, а не освобождаться.

Следующие константы предназначены для использования с set_debug():

gc.DEBUG_STATS

Выводить статистику во время сбора. Эта информация может быть полезна при настройке частоты сбора.

gc.DEBUG_COLLECTABLE

Выводить информацию о собираемых объектах, обнаруженных во время сбора.

gc.DEBUG_UNCOLLECTABLE

Выводить информацию о несобираемых объектах, обнаруженных во время сбора (объекты, которые недостижимы, но не могут быть освобождены сборщиком). Эти объекты будут добавлены в список garbage.

gc.DEBUG_INSTANCES

При установке DEBUG_COLLECTABLE или DEBUG_UNCOLLECTABLE, выводить информацию об объектах-экземплярах, обнаруженных во время сбора.

gc.DEBUG_OBJECTS

Когда устанавливается DEBUG_COLLECTABLE или DEBUG_UNCOLLECTABLE, выводится информация об объектах, помимо объектов-экземпляров.

gc.DEBUG_SAVEALL

При установке данного флага все недостижимые объекты добавляются в garbage вместо освобождения. Это может быть полезно для отладки программ с утечками памяти.

gc.DEBUG_LEAK

Флаги отладки, необходимые сборщику для вывода информации об утечке памяти (равны DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_INSTANCES | DEBUG_OBJECTS | DEBUG_SAVEALL).

Примечания

1

До Python 2.2 список содержал все объекты-экземпляры в недостижимых циклах, а не только те, имеющие методы __del__().

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/gc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API