Documentation du garbage collector Python [fermé]

132

Je recherche des documents décrivant en détail le fonctionnement de la collecte des ordures en python.

Je suis intéressé par ce qui est fait à quelle étape. Quels objets sont dans ces 3 collections? Quels types d'objets sont supprimés à chaque étape? Quel algorithme est utilisé pour la recherche de cycles de référence?

Contexte: j'implémente des recherches qui doivent se terminer en peu de temps. Lorsque le garbage collector commence à collecter la génération la plus ancienne, il est "beaucoup" plus lent que dans d'autres cas. Il a fallu plus de temps que prévu pour les recherches. Je cherche comment prédire quand il rassemblera la génération la plus ancienne et combien de temps cela prendra.

Il est facile de prédire quand il rassemblera la génération la plus ancienne avec get_count()et get_threshold(). Cela peut également être manipulé avec set_threshold(). Mais je ne vois pas à quel point il est facile de décider s'il vaut mieux faire collect()de force ou attendre la collecte programmée.

Ante
la source

Réponses:

126

Il n'y a pas de ressource définitive sur la façon dont Python effectue son garbage collection (autre que le code source lui-même), mais ces 3 liens devraient vous donner une assez bonne idée.

Mettre à jour

La source est en fait assez utile. Ce que vous en retirez dépend de la qualité de votre lecture en C, mais les commentaires sont en fait très utiles. Passez à la collect()fonction et les commentaires expliquent bien le processus (quoique en termes très techniques).

Rafe Kettler
la source
3
CPython n'utilise plus Subversion. Ils sont passés à Mercurial hébergé sur hg.python.org. Comme je ne peux pas comprendre comment créer un lien vers la version actuelle d'un fichier sur ce site, je vais plutôt créer un lien vers un miroir GitHub non officiel .
Marius Gedminas
1
Qu'à cela ne tienne, comment créer un lien vers le dernier gcmodule.c sur le site officiel. Je trouve toujours GitHub plus lisible.
Marius Gedminas
apprendre beaucoup. Thx
gus
1
Le premier lien ne pointe pas vers quoi que ce soit lié au garbage collection Python. Veuillez mettre à jour le lien.
Manish Barnwal le