Python C API具有函数PyImport_ImportModule
,该函数返回对模块的新引用。作为一个新的引用,它必须在某个时候被处理掉
在模块初始化期间创建的大多数对象都使用PyModule_AddObject
添加到模块中,这会窃取引用(如果成功)。但是,我希望将来自PyImport_ImportModule
的模块引用存储在一个全局变量中,以便快速访问。大概是这样的:
#include <Python.h>
static PyObject *imported_module;
static PyModuleDef myextension_module = {
PyModuleDef_HEAD_INIT,
.m_name = "myextension",
.m_doc = "My extension module that uses an imported module",
.m_size = -1,
};
PyMODINIT_FUNC PyInit_myextension(void)
{
// ...
PyObject *m;
m = PyModule_Create(&md4c_module);
if (m == NULL) {
return NULL;
}
// ...
imported_module = PyImport_ImportModule("extratypes");
if (imported_module == NULL) {
Py_DECREF(m);
return NULL;
}
// Presumably, imported_module needs to be Py_DECREF'd at some point
return m;
}
创建遍历/清除/释放函数是清理(similar to how it is described here,但using these instead)的正确方法,还是继续执行并PyModule_AddObject
将导入的模块转移到当前模块更好(在这种情况下,使用被盗的引用是否仍然安全)?或者两者都不是正确的处理方法
目前没有回答
相关问题 更多 >
编程相关推荐