Ich habe einen Speicherfehler in meinem Code. Mein Parser könnte so zusammengefasst werden:
%Vor%Das Ziel besteht darin, eine (große) Datei zu analysieren, wobei jede Zeile in ein json-Objekt umgewandelt wird, das in eine Datei zurückgeschrieben wird.
Mein Ziel ist es, den Footprint zu reduzieren, da dieser Code in einigen Fällen einen Speicherfehler auslöst. Nach jedem fout.write
möchte ich löschen (freier Speicher) obj
referenz.
Ich habe versucht, obj
auf None zu setzen, um die Methode obj.free_all()
aufzurufen, aber keine von ihnen gibt den Speicher frei. Ich habe auch simplejson anstelle von json verwendet, die den Footprint reduziert haben, aber in manchen Fällen immer noch zu groß.
test.in sieht folgendermaßen aus:
%Vor% Damit obj
frei verfügbar ist, müssen alle Referenzen darauf entfernt werden. Ihre Schleife hat dies nicht getan, weil der Verweis in list_obj
noch vorhanden war. Folgendes wird behoben:
Alternativ können Sie das Element destruktiv von der Vorderseite von list_obj
entfernen, obwohl dies möglicherweise zu Leistungsproblemen führen kann, wenn list_obj
zu oft neu zugewiesen werden muss. Ich habe nicht damit experimentiert, also bin ich mir nicht wirklich sicher. Diese Version sieht so aus:
Tags und Links python optimization json performance out-of-memory