グラフ データ構造を保持し、いくつかの依存関係を計算するデーモンを C++ で作成したいと考えています。また、ユーザーがこれらの C++ 構造を対話的に操作できるようにする Python Batch (デーモン - HTML ベースの GUI のバックエンド) も必要です - ノードの追加/削除/接続/... および計算結果の読み取り。
利用可能な最良の通信メカニズムを選択したいと考えています。
必須の機能は次のとおりです。
- Python と C++ はオブジェクト指向の方法でノードを操作できるはずなので、次のようなコードを記述できるようになりたい
n1 = node('a'); n2 = n1.add_subnode('b'); n2.ports('test').connect(node('c'))
- Python バッチは、C++ デーモンから「分離」する必要はありません - それらは同じ存続期間を持つことができます (しかし、C++ クラッシュまたは何か問題が発生した場合に備えて、バッチを C++ デーモンから何らかの方法で分離することをお勧めします - この分離はオプションです)。
- 通信は高速である必要があります。Python は多くのノードに関する情報を取得でき、エンド ユーザーが可能な限りスムーズに作業できるようにする必要があります。
現在、私は次のことを考えていました:
- ある種のデータシリアライゼーションメカニズムを備えたIPC ( 0MQなど)。
- Protocol BuffersまたはThriftに基づく RPC 。
- Boost.Pythonに基づく統合
IPC および RPC ソリューションは良さそうですが、ポイント 1 から機能を取得するには、大きなラッパーを作成する必要があります。一方、C++ デーモンで Boost.Python を使用することに関する情報は見つかりませんでした。可能です。