15

n 個 (通常は n < 10 ですが、スケーリングする必要があります) のプロセスが異なるマシンで実行され、RabbitMQ を使用して amqp を介して通信しています。プロセスは通常長時間実行され、任意の言語で実装できます (ただし、ほとんどは Java/Python です)。

各プロセスには、多数の入力 (数値/文字列) が必要であり、多数の出力 (数値または文字列のみ) が生成されます。プロセスの実行は非同期で行われます。つまり、入力キューにメッセージを送信し、出力キューによってトリガーされるコールバックを待機します。

理想的には、ユーザーがいくつかの入力と必要な出力を指定すると、システムは次のことを行う必要があります。

  • 必要なプロセスを検出し、依存関係グラフを生成する
  • トポロジ的にグラフをソートして実行します。ノード遷移はイベント駆動型である必要があります

入力の準備ができている場合、ノードは起動する必要があり、ブランチごとの並列処理が可能になります。今のところサイクルはないと仮定できますが、最終的にはサイクルが発生します (たとえば、出力が変化しなくなるまで、2 つのプロセスを反復する必要がある場合があります)。

これは、(データ) フロー プログラミング (ここで前に説明した) からの既知の問題である必要があり、車輪の再発明を避けたいと考えています。私はpythonソリューションを好み、検索はTrellisPypesにつながります。Trellis は開発されていませんが、サイクルをサポートしているようですが、pypes はサポートしていません。また、パイプがどの程度活発に開発されているかもわかりません。

さらに検索すると、イベント ベースのプログラミング フレームワークの全リストが表示されますが、そのどれについても私は特に詳しく知りません。もちろんTavernaKNIMEのようなワークフロー環境もありますが、それはやり過ぎのようです。

この種の問題や言及されたライブラリに取り組んだ経験のある人はいますか?

編集:私が見つけた他のライブラリは次のとおりです。

4

2 に答える 2

5

python.org has a Wiki page on "Flow Based Programming" -- http://wiki.python.org/moin/FlowBasedProgramming

于 2012-10-18T00:46:45.730 に答える
1

肝心なのは、完全に理解して文書化できる少数のコード行 (数百行) で車輪を再発明できる場合は、それを実行することです。

これは、いくつかの基本的な基盤ツールを考えると、使用される抽象化の実装がそれほど難しくない領域です。RabbitMQ はそのようなツールです。Node.js は別のものです。データフロー、ワークフロー、有限状態マシンなどを管理するための便利な方法を実装するライブラリはたくさんありますが、それらには多くの重複があり、不完全になる傾向があります。おそらく最初の開発者は、最初の問題を克服するのに十分なだけのビルドを作成しただけであり、このタイプのプログラミングはそれほど普及していなかったため、開発を継続するためのクリティカル マスがありませんでした。

考えられるすべてのソリューションを人気度でランク付けし、最も人気のあるソリューションを選択し、それを機能させるために (もちろん、作業を共有しながら) 努力することについては、言うべきことがたくさんあります。

于 2011-04-26T07:10:24.643 に答える