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加载的动态加载的扩展模块不会被卸载