在下面代码的第二次调用中,我的app segfault,所以我想我错过了一些东西:
Py_Initialize();
pName = PyString_FromString("comp_macbeth");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if(pModule == NULL) {
PyErr_Print();
Py_Finalize();
return;
}
pFunc = PyObject_GetAttrString(pModule, "compute");
/* pFunc is a new reference */
if (!pFunc || !PyCallable_Check(pFunc) ) {
PyErr_Print();
Py_Finalize();
return;
}
Py_Finalize();
comp_macb.py正在导入numpy。如果我删除numpy导入,一切都很好。这是一个numpy bug,还是我错过了一些关于进口的东西?
答案 0 :(得分:11)
如果多次调用初始化例程,某些扩展可能无法正常工作;如果应用程序多次调用Py_Initialize()和Py_Finalize(),就会发生这种情况。
显然Numpy就是其中之一。另见Numpy讨论中的this message。
只需拨打Py_Initialize()
一次,清理at exit即可。 (它也应该更快!)
答案 1 :(得分:0)
我在模块初始化部分有这个,但URL不再存在。万一有帮助:
// http://numpy.scipy.org/numpydoc/numpy-13.html mentions this must be done in module init, otherwise we will crash
import_array();