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
Modul destruktor?
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:
Was Du wahrscheinlich suchst ist
Das steht Dir nach
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
Also erst einmal der Link: http://docs.python.org/ext/ext.html
Aber dann glaube ich, daß Du da etwas durcheinanderwirfst:
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.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)
Was Du wahrscheinlich suchst ist
Code: Alles auswählen
Py_DECREF(pythonobject);
Code: Alles auswählen
#include <Python.h>
HTH,
Christian
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
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
- 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]?
Du rufst Matlab von Python aus auf? Abgesehen von 'atexit': Wird der Destruktor nicht automatisch beim Beenden des Interpreters aufgerufen? *kopfkratz*thomas15 hat geschrieben:Deswegen soll quasi der Destruktor des Singletons automatisch beim Python Ende aufgerufen werden.
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ß
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ß