3.2 gc --- Interface du Garbage Collector (ramasse-miettes)

Le module gc n'est disponible que si l'interpréteur a été construit avec l'option détection cyclique de miettes (c'est l'option par défaut). Sinon, une ImportError est déclenchée si on essaie d'importer ce module.

Ce module fournit une interface vers le ramasse-miettes optionnel. Il permet de désactiver le ramasse-miettes, de régler la fréquence de ramassage, et de définir les options de débogage. Il procure également un accès aux objets inaccessibles, que le ramasseur a trouvés mais ne peut pas libérer. Puisque le ramasse-miettes vient en complément du compteur de références déjà utilisé par Python, vous pouvez le désactiver si vous êtes sûr que votre programme ne crée pas de cycles de références. Le ramassage automatique peut être désactivé en appelantgc.disable(). Pour déboguer un programme qui a des fuites mémoire, appelez gc.set_debug(gc.DEBUG_LEAK).

Le module gc fournit les fonctions suivantes:

enable()
Active le ramasse-miettes automatique.

disable()
Désactive le ramasse-miettes automatique.

isenabled()
Retourne vrai si le ramasse-miettes automatique est activé.

collect()
Exécute un ramassage complet. Toutes les générations sont examinées et le nombre d'objets inaccessibles est retourné.

set_debug(flags)
Définit les indicateurs de débogage du ramasse-miettes. L'information de débogage sera écrite sur sys.stderr. Voir ci-dessous une liste des indicateurs de débogage qui peuvent être combinés en utilisant des opérations binaires pour contrôler le débogage.

get_debug()
Retourne la valeur courante des indicateurs de débogage.

set_threshold(seuil0[, seuil1[, seuil2]])
Définit les seuils du ramasse-miettes (la fréquence de ramassage). En affectant zéro à seuil0 on désactive le ramassage.

Le ramasse-miettes classe les objets en trois générations selon le nombre d'opérations de ramassage auxquelles ils ont survécu. Les nouveaux objets sont placés dans la génération la plus jeune (génération 0). Si un objet survit à un ramassage, il est déplacé dans la génération plus vieille d'un cran. Comme la génération 2 est la plus vieille, les objets dans cette génération y restent après un ramassage. Pour décider quand il doit s'exécuter, le ramasseur garde une trace du nombre d'objets alloués et désalloués depuis le dernier ramassage. Quand le nombre d'allocations moins le nombre de désallocations dépasse seuil0, le ramassage commence. Au départ, seule la génération 0 est examinée. Si la génération 0 a été examinée plus de seuil1 fois depuis que la génération 1 a été examinée, alors la génération 1 est aussi examinée. De même, seuil2 contrôle le nombre de ramassages de la génération 1 avant de ramasser la génération 2.

get_threshold()
Retourne les valeurs courantes des seuils sous forme d'un tuple (seuil0, seuil1, seuil2).

La variable suivante est fournie, en lecture seule:

garbage
Une liste d'objets que le ramasse-miettes a trouvés inaccessibles mais n'a pas pu libérer (objets ``inramassables''). Les objets qui ont une méthode __del__() et qui créent une part d'un cycle de références ont pour effet de rendre tout le cycle de référence inramassable. Si DEBUG_SAVEALL est défini, alors tous les objets inaccessibles seront ajoutés à cette liste plutôt que libérés.

Les constantes suivantes sont fournies pour une utilisation avec set_debug():

DEBUG_STATS
Imprime des statistiques pendant le ramassage. Cette information peut être utile quand on règle la fréquence de ramassage.

DEBUG_COLLECTABLE
Imprime des informations sur les objets ramassables trouvés.

DEBUG_UNCOLLECTABLE
Imprime des informations sur les objets inramassables trouvés (les objets qui sont inaccessibles mais ne peuvent pas être libérés par le ramasse-miettes). Ces objets seront ajoutés à la liste garbage.

DEBUG_INSTANCES
Quand DEBUG_COLLECTABLE ou DEBUG_UNCOLLECTABLE sont définis, affiche des informations sur les objets instance trouvés.

DEBUG_OBJECTS
Quand DEBUG_COLLECTABLE ou DEBUG_UNCOLLECTABLE sont définis, affiche des informations sur les objets autres que les objets instance trouvés.

DEBUG_SAVEALL
Si cette variable est définie, tous les objets inaccessibles trouvés seront ajoutés à garbage plutôt que d'être libérés. Ceci peut être utile pour déboguer un programme qui a des fuites mémoire.

DEBUG_LEAK
Les indicateurs de débogage nécessaires au ramasse-miettes pour afficher des informations au sujet d'un programme qui a des fuites mémoire (égal à DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_INSTANCES | DEBUG_OBJECTS | DEBUG_SAVEALL).