【问题标题】:Py_initialize / Py_Finalize not working twice with numpyPy_initialize / Py_Finalize 不能与 numpy 一起工作两次
【发布时间】:2011-12-02 08:13:29
【问题描述】:

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

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 导入,一切都很好。这是一个 numpy 错误,还是我错过了有关导入的一些内容?

【问题讨论】:

    标签: python c numpy


    【解决方案1】:

    来自Py_Finalize docs

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

    显然 Numpy 就是其中之一。另请参阅 Numpy-discussion 中的 this message

    只调用一次Py_Initialize(),然后清理at exit,是要走的路。 (而且它也应该更快!)

    【讨论】:

    • 我不需要多次初始化/完成,但我想检查一下我的理解是否正确
    【解决方案2】:

    我的模块初始化部分中有这个,但 URL 不再存在。如果有帮助:

    // http://numpy.scipy.org/numpydoc/numpy-13.html mentions this must be done in module init, otherwise we will crash
    import_array();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 2021-09-05
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      相关资源
      最近更新 更多