28

C/C++ アプリケーションへの Python インタープリターの埋め込みについては、十分に文書化されています。C/C++ アプリケーションから呼び出される複数のオペレーティング システム スレッド (つまり、同じプロセス内の 1 つのオペレーティング システム スレッドで 1 つのインタープリター) で複数の Python インタープリターを実行するための最良の方法は何ですか? このようなアプリケーションでは、メモリの断片化やPy_Finalize() の制限に関連する問題も発生する可能性があります。

そのようなアプローチの 1 つとして、次のようなものがあります。

  1. Python スレッド、したがって pyconfig.h で GIL を無効にして単純化 (#undef WITH_THREAD)
  2. Python インタープリター ソース コードの可変グローバル変数はすべて、スレッド ローカル ストレージを介して参照されるヒープ割り当て構造体に移動されました (参照: Python on a Phone )。

私の質問は次のとおりです。

  1. より良いアプローチはありますか?
  2. Python インタープリター ソース コードのグローバル変数を、TLS (スレッド ローカル ストレージ) 経由で参照されるヒープ割り当て構造体に自動変換できるツールはありますか?

同様のトピックがここで議論されています:

4

1 に答える 1

5

それはあなたの質問に対する正確な答えではありませんが、スレッドの代わりに別のプロセスを使用できれば、問題は解消されます。

長所:

  • Pythonをハッキングする必要はありません(そして、意図したすべてのケースで結果が機能することを確認してください)
  • 全体的に開発工数が少ない可能性が高い
  • 新しい Python バージョンへの簡単なアップグレード
  • 異なるプロセス間のインターフェースが明確に定義されているため、正しく設定してデバッグするのが容易

短所:

IPC に共有メモリを使用する場合、生成されるアプリケーション コードは、スレッドで得られるものとあまり変わらないはずです。

一部の人々は、常にプロセスをスレッドよりも優先して使用する必要があると主張していることを考えると、何らかの形で制約に適合する場合、少なくとも代替手段として検討したいと思います。

于 2011-01-17T11:59:38.533 に答える