小编典典

Py_initialize / Py_Finalize无法与numpy一起使用两次

python

在以下代码的第二次调用中,我的应用程序出现了段错误,因此我想我缺少了一些东西:

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导入,一切都很好。它是一个小错误,还是我缺少有关导入的信息?


阅读 448

收藏
2020-12-20

共1个答案

小编典典

Py_Finalize文档

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

显然Numpy就是其中之一。另请参阅来自Numpy-
discussion的此消息

Py_Initialize()只需拨打一次电话,然后在出口清扫便是解决方法。(它也应该更快!)

2020-12-20