2014-02-06 29 views
4

我的問題應該能幫助我走上正確的道路。如何使用賽璐珞合併執行我的插件?

我正在開發與併發框架celluloid紅寶石應用程序。它下面的樣子:

activity

我有一些插件。我想同時運行它們並等到最後一個結束。我有一個抽象類,名爲PluginFrame,它由所有插件繼承,並提供了一個run方法。

  1. 我的想法是做一個SupervisionGroup,但這是正確的想法?
  2. 如何運行SupervisionGroup並等到所有組成員都完成後?
  3. 建立一個單獨的PluginPool類來管理插件池是個好主意嗎?
  4. 限制pool大小對我來說也很有趣,因此只有兩個或三個插件可以同時運行。我可以如何實現這個目標?

回答

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)