2016-04-14 7 views
2

Extending Python with C or C++ beinhaltet eine gemeinsame Bibliothek zu definieren, die eine initialization function entlang der Linien von aussetztWo definiere ich Code zum Freigeben von Ressourcen, die in einer C-Python-Modul-Init-Funktion zugeordnet sind?

PyMODINIT_FUNC 
initspam(void) 
{ 
    (void) Py_InitModule("spam", SpamMethods); 
} 

ich hier Zuweisung von Ressourcen Unter der Annahme, wie ein globales Objekt über

g_bookkeeping = new Bookkeeping; 

Zuweisung Was die richtige Stelle wäre zu schreiben die entsprechende delete Aussage? Es scheint keinen Haken zu geben, um zu bemerken, dass ein Modul entladen ist, oder ist es da?

Ich hielt kurz ein globales Objekt verwenden, wie

Bookkeeping g_bookkeeping; 

... aber ich möchte über eine präzise Kontrolle haben, wenn das Objekt aufgebaut oder zerstört wird.

Die Python-Dokumentationen talks about finalization und erwähnt eine Py_Finalize() Aufruf der - zumindest in Python 2.x - internally calls PyImport_Cleanup. Dies scheint jedoch nicht viel zu tun, was das Anpassen des Herunterfahrens des Moduls angeht.

Antwort

1

A message to an issue from 2010 Staaten für die Version von Python Sie verwenden:

[...]

Bitte akzeptieren Sie, dass Python in der Tat nicht entladen Module für schwere, von grundlegender Bedeutung, unüberwindliche technische Probleme nicht unterstützt , in 2.x.

[...]

Unterstützung Entladen wird (und war) ein mehrjähriges Projekt. Erwarten Sie keine Ergebnisse in den nächsten fünf Jahren.

The documentation for Py_Finalize() erwähnt auch als Bugs und Einschränkungen:

dynamisch geladen Erweiterungsmodule von Python geladen werden nicht entladen.