Speicherproblem - Speicherbereinigung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cupibacardi
User
Beiträge: 2
Registriert: Montag 10. August 2009, 22:43

Hallo,

ich hab folgendes Problem: :mrgreen:
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
Don't let your mind wander - it'S too little to be let out alone.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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*
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
cupibacardi
User
Beiträge: 2
Registriert: Montag 10. August 2009, 22:43

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 :D , 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.
Don't let your mind wander - it'S too little to be let out alone.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

cupibacardi hat geschrieben:Danke :D , 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
Antworten