Reihenfolge von __del__ Aufrufen und garbage collection
Verfasst: Mittwoch 26. August 2015, 08:04
Hallo,
ich habe das folgende Problem:
Es gibt zwei Klassen A und B. B haelt eine Referenz auf A. In einem normalen garbage collection Zyklus kann also A nicht zerstoert werden bevor B nicht zerstoert wurde. In Klasse B halte ich eine Datei offen, die erst in der __del__ Methode geschlossen wird. Klasse A soll dann in seiner __del__ Methode den Ordner loeschen in dem die Datei von B liegt. B.__del__ muss also vor A.__del__ aufgerufen werden. Mein Problem tritt nun auf, wenn der Python Interpreter normal terminiert. Dann scheint er sich um reference counts nicht mehr zu kuemmern und ruft die beiden __del__ Methoden in der "falschen" Reihenfolge auf.
Wie kann ich dieses Problem loesen? Ich habe alle moeglichen Dinge ueber reference count und garbage collection in Python gelesen, aber nichts hat mich wirklich weitergebracht. Ich habe auch gelesen, dass niemand garantiert, dass __del__ jemals aufgerufen wird. Welche Alternativen hat man dann um clean-ups zu machen.
Danke
ich habe das folgende Problem:
Es gibt zwei Klassen A und B. B haelt eine Referenz auf A. In einem normalen garbage collection Zyklus kann also A nicht zerstoert werden bevor B nicht zerstoert wurde. In Klasse B halte ich eine Datei offen, die erst in der __del__ Methode geschlossen wird. Klasse A soll dann in seiner __del__ Methode den Ordner loeschen in dem die Datei von B liegt. B.__del__ muss also vor A.__del__ aufgerufen werden. Mein Problem tritt nun auf, wenn der Python Interpreter normal terminiert. Dann scheint er sich um reference counts nicht mehr zu kuemmern und ruft die beiden __del__ Methoden in der "falschen" Reihenfolge auf.
Wie kann ich dieses Problem loesen? Ich habe alle moeglichen Dinge ueber reference count und garbage collection in Python gelesen, aber nichts hat mich wirklich weitergebracht. Ich habe auch gelesen, dass niemand garantiert, dass __del__ jemals aufgerufen wird. Welche Alternativen hat man dann um clean-ups zu machen.
Danke