Gewusst wie: Debuggen eine MemoryError-in Python? Tools für tracking-Speicher verwenden?
Habe ich ein Python-Programm, das stirbt mit einem MemoryError wenn ich füttere es eine große Datei. Gibt es irgendwelche tools, die ich verwenden könnte, um herauszufinden, was mit der Erinnerung?
Dieses Programm lief problemlos auf kleineren input-Dateien. Das Programm benötigt natürlich einige Verbesserungen der Skalierbarkeit; ich versuche nur, um herauszufinden, wo. "Benchmark, bevor Sie zu optimieren", wie ein weiser Mensch einmal gesagt.
(Nur um vorzubeugen das unvermeidliche "fügen Sie mehr RAM" Antwort: Dies ist auf einem 32-bit-WinXP-Kiste mit 4GB RAM, also Python hat Zugriff auf 2 GB nutzbarer Speicher. Hinzufügen von mehr Speicher ist technisch nicht möglich. Neuinstallation von meinem PC mit 64-bit-Windows ist nicht praktisch.)
EDIT: Hoppla, dies ist ein Duplikat von Die Python-Speicher-profiler ist empfehlenswert?
InformationsquelleAutor user9876 | 2009-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Heapy ist ein memory-profiler für Python, das ist die Art von Werkzeug Sie brauchen.
InformationsquelleAutor Wim
Die einfachste und einfache Möglichkeit wäre wahrscheinlich die Verwendung der integrierte in-memory-query-Funktionen von Python, wie
sys.getsizeof
- führen Sie es einfach auf Ihre Objekte für eine reduzierte problem (d.h. eine kleinere Datei) und sehen, was braucht eine Menge Speicher.InformationsquelleAutor Eli Bendersky
In Ihrem Fall, die Antwort ist wahrscheinlich sehr einfach: Lesen Sie nicht die ganze Datei auf einmal, sondern verarbeiten Sie die Datei chunk für chunk. Das kann sehr einfach sein, oder kompliziert, je nach Einsatzszenario. Nur ein Beispiel, ein MD5-Prüfsummen-Berechnung kann getan werden, viel mehr effizient für große Dateien Lesen, ohne die ganze Datei. Letztere änderung hat drastisch reduziert den Speicherverbrauch in einigen SCons Nutzungsszenarien aber war es fast unmöglich zu verfolgen mit einem memory-profiler.
Wenn Ihr noch einen memory-profiler: eliben schon vorgeschlagen, sys.getsizeof. Wenn das nicht schneiden Sie es, versuchen Sie, Heapy oder Pympler.
InformationsquelleAutor Pankrat
Aufgefordert, für eine tool-Empfehlung:
Python-Memory-Validator ermöglicht die überwachung der Speicherauslastung, die Zuweisung von Standorten, GC collections, Objekt-Instanzen, Speicher-snapshots, etc Ihre Python-Anwendung. Nur Windows.
http://www.softwareverify.com/python/memory/index.html
Disclaimer: ich war eingebunden in die Erstellung dieser software.
InformationsquelleAutor Stephen Kellett