在以下代码的第二次调用中,我的应用程序出现了段错误,因此我想我缺少了一些东西:
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_macbeth.py正在导入numpy。如果删除numpy导入,一切都很好。它是一个小错误,还是我缺少有关导入的信息?
从Py_Finalize文档:
如果某些扩展程序的初始化例程被多次调用,则它们可能无法正常工作。如果应用程序多次调用Py_Initialize()和Py_Finalize(),则会发生这种情况。
显然Numpy就是其中之一。另请参阅来自Numpy- discussion的此消息。
Py_Initialize()只需拨打一次电话,然后在出口清扫便是解决方法。(它也应该更快!)
Py_Initialize()