C++ 在哪里定义代码来释放在C Python模块init函数中分配的资源?

C++ 在哪里定义代码来释放在C Python模块init函数中分配的资源?,c++,c,python-2.x,python-c-api,C++,C,Python 2.x,Python C Api,涉及定义一个共享库,该库按照 PyMODINIT_FUNC initspam(void) { (void) Py_InitModule("spam", SpamMethods); } 假设我在这里分配资源,比如通过 g_bookkeeping = new Bookkeeping; 写相应的delete语句的正确位置是什么?似乎没有任何钩子来注意模块已卸载,或者是否存在 我简单地考虑过使用全局对象,比如 Bookkeeping g_bookkeeping; …但我想精确控制那个物体何

涉及定义一个共享库,该库按照

PyMODINIT_FUNC
initspam(void)
{
    (void) Py_InitModule("spam", SpamMethods);
}
假设我在这里分配资源,比如通过

g_bookkeeping = new Bookkeeping;
写相应的
delete
语句的正确位置是什么?似乎没有任何钩子来注意模块已卸载,或者是否存在

我简单地考虑过使用全局对象,比如

Bookkeeping g_bookkeeping;
…但我想精确控制那个物体何时被构造或破坏

Python文档中提到了一个
Py_Finalize()
调用,至少在Python2.x中是这样。但是,这似乎对自定义模块关闭没有多大作用。

说明了您正在使用的Python版本:

[……]

请接受Python确实不支持在2.x中卸载严重、基本、无法克服的技术问题的模块

[……]

支持卸货将是一个多年的项目。不要期望在未来五年内有任何结果

还提到了bug和警告:

Python加载的动态加载的扩展模块不会被卸载