当前位置: 首页 > 面试题库 >

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

卞俊贤
2023-03-14
问题内容

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

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()只需拨打一次电话,然后在出口清扫便是解决方法。(它也应该更快!)



 类似资料:
  • 问题内容: 我的程序应该等待按下向左或向右箭头键,然后更改一个值,以便下次更新PaintComponent时,屏幕看起来有所不同。但是,运行该程序时,屏幕没有变化。 以下是变量声明: 这是主要的KeyListener声明: 这是用于绘画的方法: 当我运行该程序时,该程序会打印外壳,但是当我按箭头键时,屏幕上没有任何变化。 问题答案: 您需要先将关键侦听器添加到组件,然后才能调用它: 您还需要使组件

  • 问题内容: click事件可以正常运行,但是onmouseover事件不起作用。 问题答案: 您需要大写一些字母。

  • 问题内容: 我需要为我的应用程序读/写锁。我已阅读 https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock 并写了我自己的类,因为在swift中没有读/写锁 效果很好,直到我尝试从GCD线程使用它。 当我尝试在某个时刻从不同的异步块使用此类时,它允许在写入被锁定时进行写入 这是示例日志: 因此,您可以看到g被锁定,但是objc_sync_

  • 问题内容: 我在用Java做一个小Gui。我正在使用setBounds方法在JFrame上设置按钮等的位置,但是问题是,当我将JPanel按钮与JFrame一起使用时,在JFrame上不可见,并且如果没有JPanel也可以,请同时阅读代码,并请帮帮我我是初学者,正面临这些愚蠢的问题。 这个很好 当我将按钮添加到Jpanel时,相同的代码不起作用,所以怎么了,请指导我 请帮我解决这个小问题 问题答案

  • 我目前正在将IntelliJ IDE用于复杂的GWT项目。我想在GWT的开发模式中利用JRebel,所以最近我为IntelliJ安装了JRebel插件,但在使其工作时遇到了麻烦。 基本上IntelliJ不具备在更改时自动编译应用程序的能力,所以每当您对代码进行更改时,我都必须进行编译- 信息:使用JavaC1.7.0_21编译java源代码信息:15个错误信息:0个警告信息:编译完成,9分钟5秒内

  • 问题内容: 我想将datetime数组传递给Numba函数(无法向量化,否则会很慢)。我了解Numba支持numpy.datetime64。但是,它似乎支持datetime64 [D](日期精度),但不支持datetime64 [ns](毫秒精度)(我很难学到:是否已记录?)。 我试图将datetime64 [ns]转换为datetime64 [D],但似乎找不到方法!有任何想法吗? 我用下面的最