4

我的问题应该可以帮助我走上正确的道路。

我正在使用并发框架开发一个 ruby​​ 应用程序celluloid。这里的样子:

活动

我有一些插件。我想同时运行它们并等到最后一个完成。我有一个抽象类,称为PluginFrame,它被所有插件继承,并且还提供了一个run方法。

  1. 我的想法是制作一个SupervisionGroup,但这是正确的想法吗?
  2. 如何运行 aSupervisionGroup并等待所有组成员完成?
  3. 创建一个单独的PluginPool类来管理插件池是个好主意吗?
  4. 限制大小对我来说也很有趣pool,所以只有两个或三个插件同时运行。我怎样才能做到这一点?
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 回答