web-dev-qa-db-fra.com

Python du ramasse-miettes

Je cherche des documents qui décrivent en détail comment python garbage collection fonctionne.

Je suis intéressé ce qui est fait dans 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: je suis en train de mettre en place des recherches qui doivent se terminer en peu de temps. Lorsque le ramasse-miettes commence à collecter la génération la plus ancienne, il est "beaucoup" plus lent que dans d'autres cas. Cela a pris 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 collectera la génération la plus ancienne avec get_count() et get_threshold(). Cela aussi peut être manipulé avec set_threshold(). Mais je ne vois pas à quel point il est facile de décider s'il est préférable de forcer collect() par force ou d'attendre la collecte planifiée.

128
Ante

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

Mise à jour

La source est en fait très utile. La quantité que vous en retirez dépend de votre compréhension de C, mais les commentaires sont en réalité très utiles. Passez à la collect() fonction et les commentaires expliquent bien le processus (bien qu'en termes très techniques).

124
Rafe Kettler