PythonのC ++ API-SWIG、再設計、またはメッセージの受け渡し

api c++ python swig
PythonのC ++ API-SWIG、再設計、またはメッセージの受け渡し

OK

基本的にトップレベルのXML型プロトコルを備えたソケットAPIである大規模なC ++ APIがあります。 これは、会社からの分散ソースパッケージです。 ソースコードはすべて、何らかの奇妙な理由でヘッダーファイル(関数の実装を含む)に書き込まれます(開発者がHファイルをインポートする方が簡単で、複数のcppファイルのコンパイルを心配する必要がないと思いますか?)。 ソースは、C、Java、および
.NET.

私が書いているアプリケーションは、Python、Linux、およびPythonでこのAPIを使用する必要があります。 私の3つのオプションは、アプリケーション間でメッセージパッシングプロトコルを使用して個別に実行するか、SWIG(または同様の)を実行してPythonフックインを生成するか、すべてのソースコードをPythonに再実装するかのいずれかです。 最終的には、できるだけ非同期にしたい(すでにアプリケーションの他の部分でTwistedを使用している)。

SWIGを使用するのが最も速いように見えますが、関数の受け渡し、および関数からの戻りに使用される多くのカスタム型付き構造がありますが、これはSWIGで少し問題になると聞きました。

メッセージプロトコルを記述する必要はありません。メッセージプロトコルは、別の障害点と、管理しなければならない2つの異なる言語の2つの異なるソースコードを作成するためです。 PythonでC ++コードを再実装することは、最終的には良い解決策かもしれませんが、それには多大な労力と時間が必要になります。

私の質問は、SWIGは良いアイデアのように思えますが、そうであれば、ヘッダーをラップするC ++ファイルをコンパイルする必要がありますか、SWIGを忘れて他のものを調べる必要がありますか?

私は助けや考えに感謝します。 ありがとう。

編集:ヘッダーファイルには多くのソースコードがありますが、以前にミススポークしていましたが、 .lib`ファイルと .a`ファイルも多数見つかりました。 含まれているこれらの種類のファイルでSWIG、Boostなどを使用することは可能ですか? または、それらの上にトップレベルのAPIを記述して、その方法を試す必要がありますか? これまでのところ、私の試みは惨めに失敗しました。

解決策:私は自分のAPIをPythonから直接実装することになりました。 プロトコル仕様はそれほど複雑ではなく、C ++ライブラリが実際に必要以上に難しくしていることがわかりました。 また、同期呼び出しでスレッド化する代わりに、非同期フレームワーク内にlibを構築するという追加のボーナスがあります。

  4  0


ベストアンサー

SWIGは通常、このような問題に対する私の推奨ソリューションです。 「カスタム型」構造は、完全に賢明にラップできます。 ただし、ヘッダーファイルに「すべて」が含まれている場合は、http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8 [SWIGパーサーの制限]に注意する必要があります。

4


boost_pythonを検討する必要があります。 それはpython / c インターフェースの多くの制御を与え、実際に使いやすいです。 boost_pythonの使用に関する簡単なhttp://www.boostpro.com/writing/bpl.html [チュートリアル]があります。 boost_pythonはc 自体であるため、プロジェクトに3つ目のテクノロジー(swig)を追加することは避けてください。

3


タイトルとURLをコピーしました