7

私はPython3でアプリケーションを作っていbatchますguiBatchロジックの処理とgui表示を担当します。

次の要件で、どのプロセス間通信 (IPC)フレームワークを使用する必要がありますか?

  1. GUI は、バッチ以外のデバイスで実行できます (GUI は、同じデバイス、スマートフォン、タブレットなどで、ローカルまたはネットワーク経由で実行できます)。
  2. バッチ (Python3 IPc ライブラリ) は、Linux、Mac、Windows などで問題なく動作するはずです。
  3. IPC は、さまざまな言語 (Python、Javascript など) で記述された GUI をサポートする必要があります。
  4. IPC のパフォーマンスは重要です。可能な限り「インタラクティブ」である必要がありますが、情報が失われることはありません。
  5. 複数の GUI を同じバッチに接続できます。

追加: GUI も Python で記述されることが保証される場合、選択肢は他になりますか?

編集: ここのように、多くの IPC ライブラリを見つけました: Efficient Python to Python IPC or ActiveMQ or RabbitMQ or ZeroMQ or .

これまでに見つけた最も見栄えの良いオプションは次のとおりです。

  • うさぎ
  • zeromq
  • パイロ

それらはこの問題に対する適切な解決策ですか? そうでない場合、なぜですか?また、何か良いことがあれば、その理由も教えてください。

4

5 に答える 5

10

あなたが言及した 3 つは適切なようで、要件を満たします。あなたが最も快適に\慣れていると思うものを続けるべきだと思います。

私の個人的な経験から、ZeroMQ は効率性、使いやすさ、相互運用性の最適な組み合わせであると確信しています。zmq 2.2 を Python 2.7 に統合するのは簡単だったので、個人的にはこれがお気に入りです。しかし、私が言ったように、3 つのフレームワークすべてで失敗することはないと確信しています。

半分関連: 要件は時間の経過とともに変化する傾向があります。後でフレームワークを切り替えることを決定する可能性があるため、フレームワークへの依存関係をカプセル化することは、使用するのに適した設計パターンです。(たとえば、フレームワークと対話する単一のコンジット モジュールを持ち、その API で内部データ構造とドメイン言語を使用する)

于 2013-02-02T11:22:40.037 に答える
7

これにはRedisエンジンを使用しました。非常に シンプル軽量

サーバー側は次のことを行います。

import redis
r = redis.Redis() # Init
r.subscribe(['mychannel']) # Subscribe to "channel"
for x in r.listen():
  print "I got message",x

クライアント側は次のことを行います。

import redis
r = redis.Redis() # Init
r.publish('mychannel',mymessage)

「メッセージ」は (任意のサイズの) 文字列です。複雑なデータ構造を渡す必要がある場合、私は json.loads と json.dumps を使用して python dicts/arrays と文字列を変換するのが好きです - "pickle" はおそらく python-to-python 通信のためにこれを行うためのより良い方法ですが、 JSONとは「向こう側」は何にでも書けるということです。

現在、Redis には他にも 10 億もの利点がありますが、それらはすべて本質的にシンプルです。

于 2013-09-08T20:47:20.440 に答える
1

解決策はdbusです

これは成熟したソリューションであり、多くの言語 (C、Python、...、dbus + お気に入りの言語の場合は google のみ) で利用できますが、共有メモリほど高速ではありませんが、必要としないほとんどすべてのものに対して十分に高速です (ハード) リアルタイム プロパティ。

于 2013-02-02T07:48:09.243 に答える