2012-08-07 112 views
1

我對嵌入式Python 2.7.2解釋器問題感到迷惑。我已將解釋器嵌入到應用程序中,它本質上只是調用用戶編寫的腳本。Matplotlib與TkAgg錯誤:PyEval_RestoreThread:空tstate上save_fig() - 我需要線程啓用?

我的最終用戶希望使用matplotlib - 我已經解決了一些有關其對numpy的依賴問題 - 但是,當他們打電話savefig(),應用程序崩潰與:

**Fatal Python Error: PyEval_RestoreThread: NULL tstate

這不是使用標準Python 2.7.2解釋器運行相同腳本的問題,即使使用相同的站點包,所以它似乎肯定是我的嵌入有問題。我打電話Py_Initialize() - 我需要做一些設置Python線程嗎?

我不能完全從其他問題的解決方案在這裏工作,但我更擔心這是一個更廣泛的問題,我如何設置Python解釋器的症狀。

回答

3

最後解決了這個 - 所以要解釋爲了Google員工而發生的事情!

這隻發生在使用numpy或matplotlib等第三方庫時,但實際上與我的代碼中其他地方的錯誤有關。作爲我編寫的軟件的一部分,我按照Python C API文檔中所示的相同基本模式擴展了Python解釋器。

在此代碼的末尾,我在一些沿途創建的Python對象上調用了Py_DECREF函數。我的錯誤是我在借用的引用上調用了這個函數,不應該這樣做。

當軟件到達我用來清理的Py_Finalize命令時,會導致軟件崩潰。刪除借用引用上的DECREF修復了此錯誤。