Modul destruktor?

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
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

Hallo Leute,

ich bin dabei ein Modul für Python in C/C++ zu schreiben.
Bekanntermaßen gibt es für jedes Modul eine init<modulName> Funktion, die beim Importieren das Modul initialisiert. (in OOP könnte man es mit einem Konstruktor vergleichen)

Ich suche nun nach einem passendem Gegenstück, nämlich einer Art Destruktor Funktion, welches den Speicher aufräumt? Ist sowas standartmässig implementiert oder muss man das selbst irgendwie häßlich hinhacken? Bin dankbar für jeden Link usw...

Gruß und viel Erfolg bei Eueren Problemchen,
Thomas
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum,

Also erst einmal der Link: http://docs.python.org/ext/ext.html

Aber dann glaube ich, daß Du da etwas durcheinanderwirfst:
Bekanntermaßen gibt es für jedes Modul eine init<modulName> Funktion, die beim Importieren das Modul initialisiert. (in OOP könnte man es mit einem Konstruktor vergleichen)
Beim Importieren eines Moduls/eines Headers wird zunächst einmal (das ist in Python und C++ durchaus ähnlich) der Namespace erweitert. In Python kann man das mit dem Ausführen von Code, beispielsweise zum Initialisieren von Etwas, verbinden - muß man aber nicht.

Was Du wahrscheinlich suchst ist

Code: Alles auswählen

Py_DECREF(pythonobject);
Das steht Dir nach

Code: Alles auswählen

#include <Python.h>
zur Verfügung. Aber ließ Dir vorweg die Doku durch (obiger Link), denn, ob Du Py_DECREF aufrufen mußt hängt von den Funktionen ab, die Du aufrufst (=generierst Du eine Referenz oder nicht?).

HTH,
Christian
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

hi,

ich glaub ich sollte das Problem bissl konkretisieren:

Ich schreibe ein Python - Matlab Interface (ok, es gibt einige, die sind aber veraltet, sind aber eine gute Referenz).

Ich benutze ein Singleton um den Pointer auf die Matlab Instanz im Speicher zu verwalten. Wird Matlab nun geschlossen, soll die Matlab Instanz mit runtergefahren werden.
Die Instanz selbst ist dem Python Benutzer nicht zugänglich. Deswegen soll quasi der Destruktor des Singletons automatisch beim Python Ende aufgerufen werden. Kein Py_DECREF.

Besten Dank,
Thomas
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

korrektur: wird python geschlossen soll matlab auch heruntergefahren werden...
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Wäre das nicht was für [mod]atexit[/mod]?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

thomas15 hat geschrieben:Deswegen soll quasi der Destruktor des Singletons automatisch beim Python Ende aufgerufen werden.
Du rufst Matlab von Python aus auf? Abgesehen von 'atexit': Wird der Destruktor nicht automatisch beim Beenden des Interpreters aufgerufen? *kopfkratz*
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

Hi,

du hast mich drauf gebrach nochmal dadrüber nachzudenken wie sich das C++ Singleton so im Python Speicherbereich verhält.
Meine Gedankengänge würden jetzt eher für ein C++ Forum geignet... :)
Das mit dem atexit ist schonmal ein Ansatz! Danke!

Ich werd mal weiter nachgrübeln...
Gruß
Antworten