Ich habe einige Python-Code, wo gc.collect() scheint eine Menge Speicher freizugeben. Angesichts der Referenzzählweise von Python bin ich geneigt zu glauben, dass mein Programm viele zyklische Referenzen enthält. Da einige Datenstrukturen ziemlich groß sind, möchte ich schwache Referenzen einführen. Jetzt muss ich die Zirkelverweise finden, nachdem ich einige der offensichtlichen gefunden habe, Ich frage mich, ob man Zirkelverweise und die Objekte, die den Ring bilden, explizit erkennen kann. Bis jetzt habe ich nur Tutorials gesehen, wie man gc.collect et. al.Wie finde ich heraus, welche spezifischen zirkulären Referenzen in Code vorhanden sind
5
A
Antwort
0
Wenn Sie die Methoden __del__
nicht überschreiben, sollten Sie sich keine Gedanken über zirkuläre Abhängigkeiten machen, da Python in der Lage ist, mit ihnen richtig umzugehen.
+0
... bis Sie versuchen, Pythons Multiprocessing zu verwenden und Ihre Objekte nicht mehr pickle . IMO ist es eine gute Idee darüber nachzudenken, wie zyklische Referenzen beim Entwerfen einer Anwendung vermieden werden können, da es mehrere Türen offen lässt, um die Leistung zu einem späteren Zeitpunkt zu optimieren. Das ist * nicht * dasselbe wie vorzeitige Optimierung. –
Verwandte Themen
- 1. Wie finde ich heraus, welche Art von Dokument in IE
- 2. Wie finde ich heraus, welche Suchbegriffe (falls vorhanden) einen Nutzer auf meine Seite gebracht haben?
- 3. Wie finde ich heraus, welche Sprachen in EnterpriseDB geladen werden?
- 4. Wie finde ich heraus, welche Play-Version ich verwende?
- 5. Wie finde ich heraus, welche Version von TinyMCE ich verwende?
- 6. Wie finde ich heraus, welche Version von reportlab ich verwende?
- 7. Wie finde ich heraus, welche JavaScript-Ereignisse ausgelöst wurden?
- 8. Wie behandelt man Klassenobjekte mit zirkulären Referenzen?
- 9. Wie finde ich heraus, welche Visual Studio-Erweiterung Speicherlecks verursacht?
- 10. Wie finde ich heraus, welche JDK-Version Eclipse verwendet?
- 11. Wie finde ich heraus, welche Version von mod_perl installiert ist?
- 12. Wie finde ich heraus, welche meiner Markierungen in meiner Google-Karte sichtbar sind?
- 13. Wie finde ich heraus, welche Gruppe ein bestimmter Benutzer hat?
- 14. Wie finde ich heraus, welche Zeichentaste gedrückt wurde?
- 15. Wie finde ich heraus, welche Nachrichten ein Objekt versteht?
- 16. Wie finde ich heraus, welche Klasse einen Fehler druckt?
- 17. Wie finde ich heraus, welche JAR-Anwendung nicht verwendet wird?
- 18. Wie finde ich heraus, welche Container ein bestimmtes Volumen haben?
- 19. Wie finde ich heraus, welche Bibliotheken eine Windows-Exe verwendet?
- 20. Wie finde ich heraus, welche settings.xml-Datei maven verwendet
- 21. Wie finde ich heraus, welche Javascript-Bibliothek besitzt $
- 22. Wie finde ich heraus, welche Version von Sybase läuft?
- 23. Wie finde ich heraus, welche DLLs eine ausführbare Datei lädt?
- 24. Wie finde ich heraus, welche GDK-Ereignisse für ein GTK + -Signal erforderlich sind?
- 25. Wie finde ich programmatisch heraus, welche Datenbanken auf einem Server sind?
- 26. Wie finde ich heraus, was svchost macht?
- 27. Wie finde ich heraus, welche Optimierungen die JVM auf meinen Code angewendet hat?
- 28. Wie finde ich den aktuellen Überlaufprüfkontext heraus?
- 29. Wie finde ich heraus, welche CVS-Tags welche Dateien und Pfade abdecken?
- 30. Wie finde ich heraus, wo NUnit hängt?
Haben diese Objekte benutzerdefinierte '__del__' Methoden? – Cyphase
Sie können das [objgraph] (http://mg.pov.lt/objgraph/) Paket nützlich finden. Es wird eine Visualisierung der Referenzen zwischen Objekten erstellt. [Hier ist ein Blog-Post über zirkuläre Referenzen und objgraph.] (Http://engineering.hearsaysocial.com/2013/06/16/circular-references-in-python/) – Cyphase
Ich werde auch nur erwähnen, dass im Idealfall Sie würden Entfernen Sie diese Zirkelbezüge wenn möglich zuerst, anstatt zu versuchen, sie zu umgehen :). – Cyphase