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

发布于 2021-01-29 19:18:49

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

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

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Py_Finalize文档

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看