我的问题应该能帮助我走上正确的道路。
我正在使用并发框架 celluloid
开发一个 ruby 应用程序。这是它的样子:
我有一些插件。我想同时运行它们并等到最后一个完成。我有一个抽象类,叫做PluginFrame
,它被所有的插件继承并且还提供了一个run
方法。
- 我的想法是制作一个
SupervisionGroup
,但这是正确的想法吗? - 如何运行
SupervisionGroup
并等待所有组成员完成? - 创建一个单独的
PluginPool
类来管理插件池是个好主意吗? - 限制
pool
的大小对我来说也很有趣,因此只能同时运行两个或三个插件。我怎样才能做到这一点?
最佳答案
如果您的插件可能崩溃并且您希望 celluloid 重新启动它们,您只需要一个主管。
你想做的可以像使用矿池和 future 一样简单。
要为您的插件创建一个共享池,您需要一个新的 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)
关于ruby - 我如何使用 Celluloid 并行执行我的插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21598583/