Py_initialize/Py_Finalize没有使用numpy工作两次

sho*_*nex 13 c python numpy

在下面的代码的第二次调用,我的应用程序段错误,所以我想我错过了一些东西:

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();
Run Code Online (Sandbox Code Playgroud)

comp_macb.py正在导入numpy.如果我删除numpy导入,一切都很好.这是一个numpy bug,还是我错过了一些关于进口的东西?

Pet*_*rin 13

Py_Finalize文档:

如果多次调用初始化例程,某些扩展可能无法正常工作; 如果应用程序多次调用Py_Initialize()和Py_Finalize(),就会发生这种情况.

显然Numpy就是其中之一.另见Numpy讨论中的这条消息.

Py_Initialize()只需拨打一次,然后在出口处清理,就可以了.(它也应该更快!)