我的问题应该有助于我走上正确的道路。
我正在使用并发框架celluloid
开发一个ruby应用程序。这是它的样子:
我有一些插件。我想同时运行它们并等到最后一个完成。我有一个名为PluginFrame
的抽象类,它由所有插件继承,并且还提供run
方法。
SupervisionGroup
,但这是正确的想法吗?SupervisionGroup
并等待所有小组成员完成?PluginPool
类来管理插件池是个好主意吗?pool
大小对我来说也很有趣,所以只有两三个插件同时运行。我怎样才能实现这个目标?答案 0 :(得分:4)
如果您的插件可能崩溃并且您希望赛璐珞重新启动它们,您只需要一个主管。
您想要做的事情可能就像使用池和期货一样简单。
要为插件创建共享池,您需要一个新的actor。
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)