Документация по сборщику мусора Python [закрыто]

132

Я ищу документы, которые подробно описывают, как работает сборка мусора python.

Мне интересно, что делается на каком этапе. Какие предметы входят в эти 3 коллекции? Какие объекты удаляются на каждом шаге? Какой алгоритм используется для поиска референсных циклов?

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

Легко предсказать, когда он соберет старшее поколение с помощью get_count()и get_threshold(). Этим также можно манипулировать set_threshold(). Но я не вижу, насколько легко решить, что лучше сделать collect()силой или дождаться планового сбора.

ставка
источник

Ответы:

126

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

Обновить

Источник на самом деле очень полезен. Сколько вы от этого извлечете, зависит от того, насколько хорошо вы читаете C, но комментарии на самом деле очень полезны. Перейдите к collect()функции, и комментарии хорошо объяснят процесс (хотя и в очень технических терминах).

Рэйф Кеттлер
источник
3
CPython больше не использует Subversion. Они перешли на Mercurial, размещенный на hg.python.org. Поскольку я не могу понять, как создать ссылку на текущую версию файла на этом сайте, я вместо этого сделаю ссылку на неофициальное зеркало GitHub .
Мариус Гедминас
1
Ничего страшного , разобрался, как на официальном сайте дать ссылку на последний gcmodule.c . Я все еще считаю GitHub более читабельным.
Мариус Гедминас
многому научиться. Thx
Гас
1
Первая ссылка не указывает ни на что, связанное со сборкой мусора Python. Пожалуйста, обновите ссылку.
Маниш Барнвал,