[Python-de] Der 1. Adventsbesuch

Martin v. Löwis martin at v.loewis.de
Mon Dec 2 17:54:15 EST 2002


> Wie kann man denn - am besten regelmäßig zur Runtime - rausfinden,
welches
> Python-Objekt wieviel Speicher verbrät? Selberbasteln,
Speicherverwaltung
> hooken, oder was?

Ein einzelnes Python-Objekt verbrauch i.d.R. nicht mehr als 200 Byte
oder so, wenn es sich nicht gerade um einen String, eine Liste oder ein
Dictionary handelt.

Wahrscheinlicher ist, dass der Speicher dadurch verbraucht wird, dass es
immer mehr Objekte werden. Mit gc.get_objects() bekommt man eine Liste
aller "Container"-Objekte (also aller vom GC verwalteten Objekte), da
kann man mal schaun, ob die Liste nicht vielleicht immer länger wird.
Als nächstes kann man sie dann nach Typen sortieren, und schaun, von
welchem Typ die hinzukommenden Objekte sind.

Dabei nicht erfasst werden nicht-Container; die Liste *aller* Objekte
kann man nur in der Debug-Version von Python erhalten. Da wären dann
auch Strings dabei - große Strings verbrauchen viel Speicher. Vielleicht
gibt es ja sowas wie

log_data += new_data

in Deinem Programm, damit würde der verbrauchte Speicher immer größer
werden.

Wenn es nicht immer mehr Objekte werden, kannst Du auf die Größe der
Objekte schaun. Bei Objekten Variabler Größe liefert len() immer einen
guten Wert, den man mit einer kleinen ganzen Zahl multiplizieren muss,
um den Speicherverbrauch zu bekommen.

Ciao,
Martin





More information about the Python-de mailing list