グラフデータ構造を保持し、いくつかの依存関係を計算するデーモンをC++で作成したいと思います。また、Python Batch(デーモンもHTMLベースのGUIのバックエンド)を持っていて、ユーザーがこれらのC++構造を操作したり、ノードを追加/削除、接続したり、計算結果を読み込んだりすることができます。Python <-> C++オブジェクト指向コミュニケーション
私は、利用可能な最良の通信メカニズムを選択したいと考えています。
必須機能は次のとおりです。
- PythonとC++オブジェクト指向の方法で、ノード上で動作することができるはずなので、
n1 = node('a'); n2 = n1.add_subnode('b'); n2.ports('test').connect(node('c'))
- ザ・Pythonのバッチはしないように私は、コードを書くことができるのが大好きですC++デーモンから "分離"する必要があります - 同じライフタイムを持つことができます(ただし、C++デーモンのバッチをC++デーモンから分離するのは良いでしょう)。速くてください - Pythonは多くのノードに関する情報を得ることができるはずです。エンドユーザができるだけスムーズに作業できるようにします。
現在、私は考えていた:
- IPC(0MQのような)データのシリアル化メカニズムのいくつかの種類を持ちます。
- RPCはProtocol BuffersまたはThriftに基づいています。
- 統合Boost.Python
に基づいてIPCとRPCのソリューションは良いようだが、私はブーストを使用してに関する情報を発見した一方の点1からの機能性を得るために大きなラッパーを記述する必要があります。 PythonをC++のデーモンに入れても、それが可能かどうかはわかりません。
ありがとう、C++デーモンはC++で書かれていなければなりませんが、何らかの調査の後、デーモンである必要はありません。Pythonが 'Cython'/' Boost.Python'。 C++の部分は、フードの下にあるコンパイラで、グラフをバイナリのマシンコードにコンパイルします。私は解決策を見つけたと思う - Pythonをデーモンにすることは、Cythonを使っている私のC++ライブラリからいくつかの関数を呼び出すデーモンは非常に良い解決策です。 –
同意します。一般的には、Pythonで一般的な制御ロジックを実装し、PythonではC++で実装された拡張モジュールとして実行できないことを提供することが最良の選択肢です。 – Ellioh