2

RPC を目的とした Web インターフェイスを備えた C++ で書かれたプログラムがあります。http://localhost/ListVariablesorを呼び出しhttp://localhost/RunFunction?var=1て、C コードで ListVariables または RunFunction を実行することができます。それは機能しますが、優れた Python Web サーバーがたくさんある場合、C/C++ で Web サーバーを管理する必要はありません。

私が想像しているのは、C プログラムが Python を呼び出して、別のスレッド (Tornado など) で Web サーバーを起動し、C に戻ってから、計算をやり続けることです。次に、Python サーバーが でリクエストを受け取ると、 Chttp://localhost/ListVariablesにコールバックし、すでに実行中のプロセスで ListVariables を実行します。

C -----> processing -----------> processing ------------> RPC: FuncA -------->
 |                                                        ^        |
  \---> Python Web Server ---------- Request for: FuncA --/   ...   \-------->
                                     ^
  browser: http://localhost/FuncA ---/

このプロジェクトには、プログラムを最初から C から開始する必要があるという残念な警告があります。いくつかの調査を行った後、Python-->C および C->Python は Cython で実行できるため、これは少し境界的なケースのようです。ただし、C-->Python-->C に関する多くのリソースを見つけることができません。私が見つけたほとんどの例では、既に実行中のプロセスではなく、ライブラリへのリンクについて説明しているためです。実行中の C プログラムに Python をコールバックさせることは可能ですか?

4

2 に答える 2

1

絶対。Pythonコードが他のモジュールと同じようにインポートおよびアクセスできるように、注入されたCプログラムに「偽の」モジュールを作成します。sys.modules

于 2012-10-23T03:13:12.917 に答える
0

私は個人的に、PythonをC ++に埋め込み、2つの間のデータバインディングとコールバックを処理するためのboost::pythonライブラリが本当に好きです。http://www.boost.org/doc/libs/1_51_0/libs/python/doc/

そうは言っても、あなたが提案しているのはちょっとしたPITAのように聞こえます。私は個人的に、http://libevent.org/を使用して組み込みWebサーバーのニーズを満たすことに多くの成功を収めてきました。それはあなたのためにすべてのhttpサーバーのものを処理します、あなたがする必要があるのはあなたが処理したいURLとコールバックをそれに与えevent_base_loop、あなたのメインループのどこかに(またはあなたが望むならそれ自身のスレッドに)置くことです、そして離れて行きます。私には、Pythonを埋め込んで、2つの間でデータとデータ構造を渡すよりもはるかに簡単なように思えます。

于 2012-10-23T03:24:48.643 に答える