我对嵌入式 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解释器的更广泛问题的症状。
答案 0 :(得分:3)
最后解决了这个 - 所以要解释为了Google员工而发生的事情!
这只发生在使用像numpy或matplotlib这样的第三方库时,但实际上与我代码中的其他地方的错误有关。作为我编写的软件的一部分,我正在按照Python C API文档中显示的相同基本模式扩展Python解释器。
在这段代码的最后,我在我创建的一些Python对象上调用了Py_DECREF函数。我的错误是我在借用的引用上调用了这个函数,不应该这样做。
这导致软件在到达我用来清理的Py_Finalize命令时因上述错误而崩溃。删除借用引用上的DECREF修复了此错误。