2012-04-18 21 views
2

私はこれは私がそれを行う方法で、パイソンを埋め込むために、ブースト::のpythonを使用しています:埋め込みPythonとランニング

void runCode(){ 
    Py_Initialize(); 
    //boost::python code goes here and embedded python code runs 
    Py_Finalize(); 
} 

それは初めてうまく動作しますが、それが再び実行されたときこのエラーが発生します:

LookupError: unknown encoding: utf8

とコードが期待どおりに実行されない場合は、何か助けに感謝します。

+0

これに関する追加のコメント:[boost documentation](http://www.boost.org/doc/libs/1_52_0/libs/python/doc/tutorial/doc/html/python/embedding.html)から)、あなたは現在 'Py_Finalize()'を呼び出すべきではありません。彼らはそれをサポートしていません。 –

+0

@sharth正しいですが、私はPy_Finalizeを使用せずに呼び出していますが、これは望ましい解決策ではありません – PLuS

答えて

2

あなたは専門家の回答を得ていないので、私は似たような問題に取り組むことから学びをしています。 Pythonにreinitialization supportの問題があります。何らかのエラーのためにインタープリタを再起動する必要がある場合や、多くの独立したインタープリタを実行したい場合は、残念です。 (上記のリンクから引用)リソースとメモリがリークしている

一つの問題:

Bugs and caveats: Dynamically loaded extension modules loaded by Python are not unloaded. Small amounts of memory allocated by the Python interpreter may not be freed (if you find a leak, please report it). Memory tied up in circular references between objects is not freed. Some memory allocated by extension modules may not be freed. Some extensions may not work properly if their initialization routine is called more than once; this can happen if an application calls Py_Initialize() and Py_Finalize() more than once.

もう一つの問題は、たとえばin this SO threadために見ることができるように多くのモジュールは、これを適切にサポートしていないです。 これはあなたが直面している問題だと思います。

それは、ほとんどのPythonアプリケーションの回避策この問題思わ:

  • 専用プロセスでエンジン走行を持っていることによって、あなたは、それを進めるための第二1が動作する場合(一般的な通訳の)明確な実行状態

を表すsubinterpretersを使用して