3

私はboost::pythonを使用してpythonを埋め込みます、これは私がそれを行う方法です:

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

初めて正常に実行されますが、再度実行すると、次のエラーが発生します。

LookupError:不明なエンコーディング:utf8

コードが期待どおりに実行されない場合は、助けていただければ幸いです。

4

1 に答える 1

3

あなたは専門家の答えを得られなかったので、私は同様の問題に取り組むことから私の学習を提供しています。Pythonには、再初期化のサポートに問題があります。エラーが原因でインタープリターを再起動する必要がある場合、または多くの独立したインタープリターを実行する必要がある場合、これは残念です。

リソースとメモリのリークが1つの問題です(上記のリンクから引用)。

バグと警告:Pythonによってロードされた動的にロードされた拡張モジュールはアンロードされません。Pythonインタプリタによって割り当てられた少量のメモリが解放されない場合があります(リークを見つけた場合は、報告してください)。オブジェクト間の循環参照に拘束されているメモリは解放されません。拡張モジュールによって割り当てられた一部のメモリが解放されない場合があります。一部の拡張機能は、初期化ルーチンが複数回呼び出された場合に正しく機能しない可能性があります。これは、アプリケーションがPy_Initialize()とPy_Finalize()を複数回呼び出す場合に発生する可能性があります。

もう1つの問題は、たとえばこのSOスレッドで見られるように、多くのモジュールがこれを適切にサポートしていないことです。これがあなたが直面している問題だと思います。

ほとんどのPythonアプリケーションはこの問題を回避しているようです。

  • エンジンを専用のプロセスで実行させることによって;
  • (一般的なインタプリタの)個別の実行状態を表すサブインタプリタを使用する

2つ目がうまくいく場合は、先に進んでください。

于 2012-04-23T08:33:05.447 に答える