1

我对嵌入式Python 2.7.2 解释器问题感到困惑。我已将解释器嵌入到Visual C++ 2010应用程序中,它本质上只是调用用户编写的脚本。

我的最终用户想要使用matplotlib- 我已经解决了许多与它对 numpy 的依赖相关的问题 - 但是当他们调用时savefig(),应用程序崩溃:

**Fatal Python Error: PyEval_RestoreThread: NULL tstate

这不是使用标准Python 2.7.2 解释器运行相同脚本的问题,即使使用相同的站点包,所以我的嵌入似乎肯定有问题。我打电话Py_Initialize()- 我需要做一些设置 Python 线程的事情吗?

我无法从这里的其他问题中得到解决方案,但我更担心这是我如何设置 Python 解释器的更广泛问题的症状。

4

1 回答 1

3

终于解决了这个问题 - 所以为了 Google 员工,我要解释发生了什么!

这仅在使用 numpy 或 matplotlib 等第三方库时发生,但实际上与我代码中其他地方的错误有关。作为我编写的软件的一部分,我按照 Python C API 文档中所示的相同基本模式扩展了 Python 解释器。

在这段代码的最后,我对我在此过程中创建的一些 Python 对象调用了 Py_DECREF 函数。我的错误是我在借用的引用上调用了这个函数,这是不应该的。

这导致软件在到达我用来清理的 Py_Finalize 命令时因上述错误而崩溃。删除借用引用上的 DECREF 修复了此错误。

于 2012-11-25T14:12:14.740 回答