Ich verwende pandas.DataFrame
in einem Multi-Thread-Code (eigentlich eine benutzerdefinierte Unterklasse von DataFrame
namens Sound
). Ich habe bemerkt, dass ich ein Speicherleck habe, da die Speicherauslastung meines Programms allmählich über 10 Millionen steigt, um schließlich ~ 100% meines Computerspeichers zu erreichen und abzustürzen.Speicherleck mit Pandas Datenrahmen
verwendete ich objgraph zu versuchen, dieses Leck-Tracking, und fand heraus, dass die Anzahl der Fälle von MyDataFrame
wird die ganze Zeit steigen, während es sollte nicht: jeder Thread in seiner run
Methode eine Instanz schafft, macht einige Berechnungen, spart das Ergebnis in einer Datei und beendet ... also sollten keine Referenzen beibehalten werden.
Mit objgraph
fand ich, dass alle Datenrahmen im Speicher ein ähnliches Referenzgraphen haben:
Ich habe keine Ahnung, ob das normal ist oder nicht ... es sieht aus wie das ist, was zu halten ist meine Objekte im Speicher. Irgendeine Idee, Rat, Einsicht?
Ist es möglich, ein Kurzcode-Snippet zu integrieren, um dies zu replizieren? –
Haben Sie versucht, den Garbage Collector manuell auszuführen? Wenn Sie Zirkelverweise haben, könnte dies erforderlich sein, um den Speicher freizugeben. 'importieren gc; gc.collect() ' – lgautier