Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Выводы    201

>>>import gc

>>>gc.set_debug(gc.DEBUG_COLLECTABLE | gc.DEBUG_SAVEALL)

>>>z = [0, 1, 2, 3]

>>>z.append(z)

>>>del z

>>>gc.collect()

gc: collectable <list 0x10d594a00>

>>> gc.garbage

[[0, 1, 2, 3, [...]]]

Чтобы получить порог, после которого запускается сборщик мусора, вызовите get_threshold():

>>> gc.get_threshold() (700, 10, 10)

Также можно получить текущие пороговые счетчики:

>>> gc.get_count() (688, 1, 1)

Наконец, алгоритм сборки мусора можно запустить вручную для конкретного поколения; функция вернет размер освобожденной памяти:

>>> gc.collect(0) 24

Если поколение не задано, по умолчанию используется значение 2, которое объединяет поколения 0 и 1:

>>> gc.collect() 20

ВЫВОДЫ

В этой главе вы узнали, как CPython выделяет память, управляет ею и освобождает ее. Эти операции выполняются тысячи раз на протяжении жизненного цикла даже простейших Python-скриптов. Надежность и масштабируемость системы управления памятью CPython позволяет масштабировать систему от двухстрочного скрипта до самого популярного веб-сайта в мире.

Система выделения сырой и объектной памяти, представленная в этой главе, пригодится вам при разработке модулей расширения. Модули расширения C

Книги для программистов: https://t.me/booksforits

202    Управление памятью

требуют досконального знания системы управления памятью CPython. Даже один пропущенный вызов Py_INCREF() может привести к утечке памяти или сбою системы.

При работе с чистым кодом Python хорошее знание сборщика мусора позволит вам писать код длительного исполнения. Например, если вы написали одну функцию, выполнение которой занимает часы, дни и более, эта функция должна тщательно управлять своей памятью в ограничениях системы, в которой она запущена.

Теперь вы сможете использовать некоторые методы, представленные в этой главе, для управления и настройки поколений сборки мусора для оптимизации вашего кода и его затрат памяти.

Книги для программистов: https://t.me/booksforits