質問

いくつかのアプリケーションを一緒にリンクすることを検討しています(すべてC#、C ++、Pythonなどの異なる言語で書かれています)、どうすればよいかわかりません。

リンクすることとはどういう意味ですか?私が取り組んでいるシステムは、特定の処理タスクを担当する小さなプログラムで構成されています。データセットをあるアプリケーションから別のアプリケーションに簡単に転送できる必要があります(問題のデータセットはそれほど大きくなく、おそらくいくつかのメガバイトがあります)。また、操作の現在の状態を制御する方法も必要です(これはクライアントサーバーモデルがベルを鳴らす場所)

ソケットや石鹸は普遍的な解決策のように思えますが、人々がこの主題についてどう思うかについて意見を得たいと思っていました。

コメント/提案をいただければ幸いです、ありがとう!

役に立ちましたか?

解決

私は個人的に好きです ØMQ. 。これは、メッセージを渡すための馴染みのあるBSDソケットのようなインターフェイスを備えたライブラリですが、タスクを配布するための興味深いパターンを実装することがわかります。

パイプラインにいくつかのプロセスを手配したいようです。 ØMQを使用すると、プッシュソケットと投票ソケットを使用してそれを行うことができます。 (そしてその後、複数のプロセスとマシンにわたってほとんど努力せずにスケールアップすることが可能であることがわかります。) ガイド 始めるために、そして Zmq_Socket(3) プッシュとプルの仕組みについては、特にマンページ。

あなたが言及したすべての言語でバインディングを利用できます。

メッセージの内容に関しては、ØMQはそれ自体に関係していませんが、それらは生データのブロックにすぎません。 JSONなど、自分に合った任意のフォーマットを使用できます。 プロトコルバッファー.

私がよくわからないのは、あなたが言及する「コントロール状態」です。たとえば、途中で仕事をキャンセルすることに興味がありますか?

他のヒント

C#からC#の場合、使用できます Windows Communication Foundation. 。 PythonとC ++でも使用できる場合があります。

名前のパイプをチェックアウトすることもできます。

すべてのアプリケーションが見ているデータを集中化することにより、問題を排除するモデルに移動することを考えます。いわば「真実の一つの源」を維持してください。

ほとんどの外部ソフトウェアは、そのシンボルに使用する名前のマングルアルゴリズムのために、C ++コードとのリンクに問題があります。そのため、他の言語で書かれたプログラムとインターフェースする場合、ラッパーを物事に宣言するのが最善です。 extern "C" または内部 extern "C" { ブロック。

データセットをあるアプリケーションから別のアプリケーションに簡単に転送できる必要があります(問題のデータセットはそれほど大きくありません。おそらくいくつかのメガバイトです)

ファイルシステムを使用します。

また、操作の現在の状態を制御するための何らかの形の方法も必要です

繰り返しますが、ファイルシステムを使用します。 JSONシリアル化されたオブジェクトを備えた「current_state.json」ファイルは、複数の言語で動作するのに最適です。

ソケットや石鹸は普遍的な解決策のようです。

多分。しかし、この種のことはやり過ぎです。 OSにはすでに必要なすべての施設があります。ファイルシステムを使用するだけです。とてもシンプルで非常に信頼性があります。

インタープロセス通信を行うには多くの方法があります。あなたが言ったように、ソケットは普遍的な解決策かもしれません。石鹸はやや過剰だと思います。 MailSlotsを使用することもできます。数年前にC ++アプリケーションを使用して作成しました。名前のパイプも解決策になる可能性がありますが、Windowsでコーディングしている場合は難しいかもしれません。

私の意見では:

  1. ソケット
  2. MailSlots

最高の候補者です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top