Extending Python with C or C++涉及定义一个共享库,它沿着
行公开initialization functionPyMODINIT_FUNC
initspam(void)
{
(void) Py_InitModule("spam", SpamMethods);
}
假设我在这里分配资源,比如通过
分配全局对象g_bookkeeping = new Bookkeeping;
写出相应的delete
声明的正确位置是什么?似乎没有任何钩子可以注意到模块已卸载,或者是否存在?
我简要地考虑过使用全局对象,比如
Bookkeeping g_bookkeeping;
...但我希望能够精确控制何时构造或破坏该对象。
Python文档talks about finalization并提到了Py_Finalize()
调用 - 至少在Python 2.x - internally calls PyImport_Cleanup
中。但是,就定制模块关闭而言,这似乎没什么用。
答案 0 :(得分:1)
A message to an issue from 2010表示您正在使用的Python版本:
[...]
请接受Python确实不支持在2.x中为严重的,基本的,不可克服的技术问题卸载模块。
[...]
支持卸货将是(并且是)一个多年的项目。不要期望在未来五年内取得任何成果。
The documentation for Py_Finalize()
也提及错误和警告:
不会卸载由Python加载的动态加载的扩展模块。