133 votes

Documentation sur le collecteur d'ordures Python

Je recherche des documents qui décrivent en détail le fonctionnement du garbage collection en python.

Ce qui m'intéresse, c'est de savoir ce qui est fait à chaque étape. Quels objets se trouvent dans ces trois collections ? Quels types d'objets sont supprimés à chaque étape ? Quel algorithme est utilisé pour la recherche des cycles de référence ?

Contexte : Je suis en train de mettre en place des recherches qui doivent être terminées en peu de temps. Lorsque le ramasse-miettes commence à collecter la génération la plus ancienne, il est "beaucoup" plus lent que dans les autres cas. Cela prend plus de temps que ce qui est prévu pour les recherches. Je cherche à savoir comment prédire quand le ramasse-miettes va collecter la génération la plus ancienne et combien de temps cela va prendre.

Il est facile de prévoir quand elle collectera la génération la plus âgée avec get_count() y get_threshold() . Cela peut également être manipulé avec set_threshold() . Mais je ne vois pas en quoi il est facile de décider s'il vaut mieux faire collect() par la force ou attendre la collecte programmée.

127voto

Rafe Kettler Points 29389

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

Mise à jour

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

3 votes

CPython n'utilise plus Subversion. Ils sont passés à Mercurial hébergé sur hg.python.org. Comme je n'arrive pas à trouver comment faire un lien vers la version actuelle d'un fichier sur ce site, je vais faire un lien vers un fichier de type miroir GitHub non officiel au lieu de cela.

1 votes

Peu importe, j'ai trouvé le moyen de faire un lien vers la dernière version de gcmodule.c sur le site officiel. Je trouve toujours GitHub plus lisible.

0 votes

Apprendre beaucoup. Merci beaucoup

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X