Python Garbage Collector-Dokumentation [geschlossen]

132

Ich suche nach Dokumenten, die detailliert beschreiben, wie die Python-Garbage Collection funktioniert.

Mich interessiert, was in welchem ​​Schritt gemacht wird. Welche Objekte befinden sich in diesen 3 Sammlungen? Welche Arten von Objekten werden in jedem Schritt gelöscht? Welcher Algorithmus wird zum Auffinden von Referenzzyklen verwendet?

Hintergrund: Ich implementiere einige Suchvorgänge, die in kurzer Zeit abgeschlossen sein müssen. Wenn der Garbage Collector mit dem Sammeln der ältesten Generation beginnt, ist er "viel" langsamer als in anderen Fällen. Es hat mehr Zeit in Anspruch genommen, als für die Suche vorgesehen ist. Ich suche, wie ich vorhersagen kann, wann die älteste Generation gesammelt wird und wie lange es dauern wird.

Es ist leicht vorherzusagen, wann die älteste Generation mit get_count()und gesammelt wird get_threshold(). Das kann auch mit manipuliert werden set_threshold(). Aber ich sehe nicht, wie einfach es ist, sich zu entscheiden, ob es besser ist, collect()mit Gewalt zu entscheiden oder auf die geplante Abholung zu warten.

Ante
quelle

Antworten:

126

Es gibt keine definitive Ressource für die Speicherbereinigung von Python (außer dem Quellcode selbst), aber diese drei Links sollten Ihnen eine ziemlich gute Idee geben.

Aktualisieren

Die Quelle ist eigentlich ziemlich hilfreich. Wie viel Sie davon haben, hängt davon ab, wie gut Sie C lesen, aber die Kommentare sind tatsächlich sehr hilfreich. Springen Sie zur collect()Funktion und die Kommentare erklären den Prozess gut (wenn auch in sehr technischen Begriffen).

Rafe Kettler
quelle
3
CPython verwendet Subversion nicht mehr. Sie wechselten zu Mercurial, das auf hg.python.org gehostet wird. Da ich nicht herausfinden kann, wie ich auf die aktuelle Version einer Datei auf dieser Site verlinken kann, werde ich stattdessen auf einen inoffiziellen GitHub-Spiegel verlinken .
Marius Gedminas
1
Egal , ich habe herausgefunden, wie ich auf der offiziellen Website auf das neueste gcmodule.c verlinken kann . Ich finde GitHub immer noch besser lesbar.
Marius Gedminas
eine Menge lernen. Thx
gus
1
Der erste Link verweist nicht auf irgendetwas, das mit der Python-Garbage Collection zusammenhängt. Bitte aktualisieren Sie den Link.
Manish Barnwal