4

私の質問は、私が正しい道を歩むのに役立つはずです。

コンカレント フレームワークを使用して ruby​​ アプリケーションを開発していますcelluloid。これがどのように見えるか:

アクティビティ

私はいくつかのプラグインを持っています。それらを同時に実行し、最後のものが終了するまで待ちたいと思います。すべてのプラグインに継承され、メソッドPluginFrameも提供するという抽象クラスがあります。run

  1. を作ろうと思ったのSupervisionGroupですが、それでよろしいでしょうか?
  2. SupervisionGroupを実行して、すべてのグループ メンバーが終了するまで待つにはどうすればよいですか?
  3. PluginPoolプラグインのプールを管理するために別のクラスを作成するのは良い考えですか?
  4. サイズを制限することも興味深いpoolので、同時に実行できるプラグインは 2 つまたは 3 つだけです。どうすればこれを達成できますか?
4

1 に答える 1

4

プラグインがクラッシュする可能性があり、セルロイドにプラグインを再起動させたい場合は、スーパーバイザーが必要です。

やりたいことは、プールや先物を使用するのと同じくらい簡単かもしれません。

プラグイン用の共有プールを用意するには、そのための新しいアクターが必要です。

class PluginRunner
  include Celluloid

  def run(plugin)
    plugin.run
  end
end

plugin_runner = PluginRunner.pool(size: 4)

plugins = [LastFmPlugin, TwitterPlugin]
results = plugins.map {|p| plugin_runner.future.run(p) }.map(&:value)
persist_results(results)
于 2014-02-06T10:28:27.947 に答える