6

バックエンドが完全にC++であるトレーディングアプリケーションを作成しています(QuickFixエンジンを使用)。このバックエンドの上にDjangoでWebアプリケーションを構築し、ユーザーが注文できるようにします。Django(python)とC ++アプリケーションはどちらも、独自のプロセスとアドレス空間で実行されます。注文/メッセージをDjangoからC++に渡すのに最適なアイデアは何だと思いますか?

また、これは取引アプリケーションであるため、遅延が最大の懸念事項です。そのため、Djangoからデータベースに注文してから、C++アプリケーションからフェッチする必要はありません。

私は現在、共有メモリまたは他のIPCメカニズムを介してそれを行うことを検討しています。これは良い考えですか?

4

4 に答える 4

2

さて、あなたはいくつかのIPCメソッドを使用する必要があります。ここで言及していないのは、C++プロセスにソケットをリッスンさせることです。これにより、プロセスが同じマシン上にある必要がないという柔軟性が(わずかな速度コストで)追加されます。

私はC++から来て、PythonでUXを書きたいと思って、ある種の似たようなことをしています。私の計算バックエンドはC++であり、Pythonモジュールをコンパイルし、UX用のflaskを使用してhtmlを生成します。私のC++とPythonは同じプロセスで動作するため、実際にはまだコアの質問に対処していません。

私が与えるアドバイスの1つは、すべてのIPCをC ++で保持し、Boost.Pythonを使用してC++で小さなPythonモジュールを作成することです。これにより、PythonプロセスがPythonの世界で作業の95%を実行できるようになりますが、C++に送信するデータのC++開発者として私が望むビットレベルの信頼性が得られます。Boost.Pythonは、C++とPythonのWebフレームワークのブリッジングを簡単にしました。

于 2011-09-01T19:13:39.577 に答える
1

IPCにはzeromqを使用します

于 2011-09-01T19:24:54.247 に答える
1

既存のプロトコルを考え出すか、C++とPython間の通信を可能にする独自のプロトコルを作成する必要があります。私が信じる最も簡単な方法は、 ZeroCIceCORBAなどのIPCを使用することです。または、ネイティブC ++コードをPythonにスローして、Djangoから使用することもできます。これは、QuickFIXを使用することもできます。

また、レイテンシーが本当に心配な場合(少なくともミリ秒は問題で、ナノ秒は言わないでください)、QuickFIXやPythonはまったく使用しないでください。

于 2011-09-01T19:07:26.323 に答える
0

私はおそらくJSON-RPCのようなものを選び、ローカルソケットまたは名前付きパイプを介して通信します。

共有メモリは高速ですが、自分で実行する必要がある場合は正しく実行するのが難しいです(これは、並行性とロックを意味します。IMOでは、可能であれば回避する必要があります)。

メッセージサイズと遅延要件によって異なります。また、以下のコメントでvladが言及しているように、共有メモリ上で機能するIPCメカニズムをいつでも試すことができます。

(将来システムをクラスター化する必要がある場合に備えて、パイプ/ソケットにフォールバックできるIPCシステムを用意することは良いことかもしれないことに注意してください)。

于 2011-09-01T19:08:33.843 に答える