Documentação do coletor de lixo Python [fechada]

132

Estou procurando documentos que descrevam em detalhes como funciona a coleta de lixo python.

Estou interessado no que é feito em qual etapa. Quais objetos estão nessas três coleções? Que tipos de objetos são excluídos em cada etapa? Qual algoritmo é usado para encontrar ciclos de referência?

Antecedentes: estou implementando algumas pesquisas que precisam ser concluídas em pouco tempo. Quando o coletor de lixo começa a coletar a geração mais antiga, é "muito" mais lento que em outros casos. Demorou mais tempo do que o previsto para pesquisas. Estou procurando como prever quando ele coletará a geração mais antiga e quanto tempo levará.

É fácil prever quando ele coletará a geração mais antiga com get_count()e get_threshold(). Isso também pode ser manipulado com set_threshold(). Mas não vejo como é fácil decidir se é melhor fazer collect()à força ou esperar pela coleta programada.

Ante
fonte

Respostas:

126

Não há recurso definitivo sobre como o Python faz sua coleta de lixo (além do próprio código-fonte), mas esses três links devem fornecer uma boa idéia.

Atualizar

A fonte é realmente bastante útil. Quanto você tira disso depende de quão bem você lê C, mas os comentários são realmente muito úteis. Vá para a collect()função e os comentários explicam bem o processo (embora em termos muito técnicos).

Rafe Kettler
fonte
3
O CPython não usa mais o Subversion. Eles mudaram para o Mercurial hospedado em hg.python.org. Como não consigo descobrir como vincular à versão atual de um arquivo nesse site, vincularei a um espelho não oficial do GitHub .
Marius Gedminas
1
Não importa, descobri como fazer o link para o último gcmodule.c no site oficial. Ainda acho o GitHub mais legível.
Marius Gedminas
aprende muito. Thx
gus
1
O primeiro link não aponta para nada relacionado à coleta de lixo do Python. Atualize o link.
Manish Barnwal