Seite 1 von 1

Modul destruktor?

Verfasst: Montag 21. April 2008, 19:10
von thomas15
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

Verfasst: Montag 21. April 2008, 19:15
von CM
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

kein missverständniss

Verfasst: Montag 21. April 2008, 19:39
von thomas15
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

korrektur:

Verfasst: Montag 21. April 2008, 23:28
von thomas15
korrektur: wird python geschlossen soll matlab auch heruntergefahren werden...

Verfasst: Dienstag 22. April 2008, 07:56
von birkenfeld
Wäre das nicht was für [mod]atexit[/mod]?

Re: kein missverständniss

Verfasst: Dienstag 22. April 2008, 09:40
von CM
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*

Verfasst: Dienstag 22. April 2008, 19:13
von thomas15
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ß