Seite 1 von 1
Speicherproblem - Speicherbereinigung
Verfasst: Montag 10. August 2009, 22:54
von cupibacardi
Hallo,
ich hab folgendes Problem:
Ich schreibe ein Programm, in dem aus einem Namen ein dreidimensionales Modell erzeugt wird (ich möchte jetzt hier nicht alles erläutern^^), jedenfalls allen dabei einige Arbeiten mit oftmals großen Arrays an, später lungert dazu ncoh ein Haufen Objekte von VPython im Arbeitsspeicher herum.
Deshalb nmeine Frage: Gibt es in Pyton irgendeine Möglichkeit, den Speicher aufzuräumen, weil spätestens nach 3 durchlaäufen ist schicht im schacht. Die banalste Lösung wäre wie gesagt immer wieder ein Neustart, aber es ist echt doof, jedesmal wieder üdie benutzeroberfläche aufzubauen...
Vielen Dank
cupibacardi
Verfasst: Montag 10. August 2009, 23:37
von cofi
Erm ja:
http://docs.python.org/library/gc.html
Allerdings laeuft der GC sowieso mit und reisst sich unter den Nagel, was nicht mehr benoetigt wird, d.h. es ist wahrscheinlicher, dass du ein irgendwo Memory Leak hast oder einfach ineffizienten Code schreibst.
Die Moeglichkeit, dass eben so viel benoetigt wird, gibt es aber auch. Generell kann man da nicht viel ohne Code sagen.
Verfasst: Dienstag 11. August 2009, 09:08
von snafu
cofi hat geschrieben:Allerdings laeuft der GC sowieso mit und reisst sich unter den Nagel, was nicht mehr benoetigt wird
Genauer gesagt: Was nicht mehr referenziert wird.
Wenn man mal irgendwann ein Objekt gebunden hat und das nicht mehr benötigt, sollte IMHO auch ein `del objektname` helfen. Zumindest insoweit ich das mit meinem rudimentären Wissen über Pythons Interna beurteilen kann.

*mal-vorsichtig-sei*
Verfasst: Dienstag 11. August 2009, 09:12
von Leonidas
snafu hat geschrieben:Wenn man mal irgendwann ein Objekt gebunden hat und das nicht mehr benötigt, sollte IMHO auch ein `del objektname` helfen.
`del` sollte man in sauber geschriebenen Programmen nicht benötigen, denn in sauber geschriebenen Programmen verschwinden die Referenzen auf nicht mehr benötigte Elemente sobald die Funktion endet, somit werden am ende der Funktion alle unnötigen Elemente implizit entsorgt.
Wäre ja auch ziemlich qualvoll, am Ende der Funktionen alles mühsam zu ``free()``n.. ähh, ``del``n.
Verfasst: Dienstag 11. August 2009, 09:14
von CM
Hoi,
herzlichen willkommen im Forum, cupibacardi. Abgesehen von den Anmerkungen hier: Es gibt für Python diverse 3D Graphiksoftwarepakete. Was brauchst Du denn?
Gruß,
Christian
Verfasst: Dienstag 11. August 2009, 21:46
von cupibacardi
CM hat geschrieben:Hoi,
herzlichen willkommen im Forum, cupibacardi. Abgesehen von den Anmerkungen hier: Es gibt für Python diverse 3D Graphiksoftwarepakete. Was brauchst Du denn?
Gruß,
Christian
Danke

, aber ich habe bereits alles was Grafik angeht, WxPython und VisualPython, das ganze läuft ja wie gesagt nur nach 3 Molekülen lahm.
Ich werd mir jetzt erstmal den Garbage Collector anschaun
Vielen Dank für die schnellen Antworten.
Verfasst: Donnerstag 13. August 2009, 21:01
von CM
cupibacardi hat geschrieben:Danke

, aber ich habe bereits alles was Grafik angeht, WxPython und VisualPython, das ganze läuft ja wie gesagt nur nach 3 Molekülen lahm.
Nein, hast Du nicht gesagt - oben waren es einfach nur "drei Durchläufe", von was auch immer

.
Was sind "Moleküle"? Kleine Moleküle in Orbitaldarstellung (was sonst könnte soviel Speicher im Falle kleiner Moleküle fressen)? Proteinstrukturen - in welcher Darstellung? Gar große Komplexe? Für all dies gäbe es (bereits implementierte) Lösungen teils in Python, teils mit Pythoninterface.
Wie auch immer ... wenn das passiert, machst Du was falsch. Und ich möchte vermuten, dass es nicht nur am gc liegt. Dein Code ist wahrscheinlich recht umfangreich, zu umfangreich zum posten. Aber vielleicht magst Du hier Dein Konzept schildern, da könntest Du u. U. auch schon Hilfe erhalten.
Gruß,
Christian