1

埋め込まれたPython2.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などのサードパーティライブラリを使用している場合にのみ発生しましたが、実際にはコードの他の場所でのエラーに関連しています。私が作成したソフトウェアの一部として、PythonCAPIドキュメントに示されているのと同じ基本パターンに従ってPythonインタープリターを拡張していました。

このコードの最後で、途中で作成したPythonオブジェクトのいくつかでPy_DECREF関数を呼び出しました。私の間違いは、借用した参照でこの関数を呼び出していたということでしたが、これは実行すべきではありません。

これにより、クリーンアップに使用したPy_Finalizeコマンドに到達したときに、上記のエラーでソフトウェアがクラッシュしました。借用した参照のDECREFを削除すると、このエラーが修正されました。

于 2012-11-25T14:12:14.740 に答える