ruby - 我如何使用 Celluloid 并行执行我的插件?

标签 ruby multithreading concurrency celluloid

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

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

activity

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

  1. 我的想法是制作一个 SupervisionGroup ,但这是正确的想法吗?
  2. 如何运行 SupervisionGroup 并等待所有组成员完成?
  3. 创建一个单独的 PluginPool 类来管理插件池是个好主意吗?
  4. 限制 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/

相关文章:

ruby-on-rails - Rails 模块与模型类名称冲突

ruby-on-rails - 简单的SSH测试Rails

c# - C#中有 "try to lock, skip if timed out"操作吗?

javascript - Gmaps4Rails - 入门

ruby-on-rails - Rails - 如何获取访问者的IP地址?

android - Unity3D 和安卓 : Difference between "UnityMain" and "main" threads?

Java 如何线程化 GUI

java - 我应该使用 ConcurrentHashMap 还是 Hashmap 还是 SynchronizedMap?

java - BlockingQueue.take 在什么情况下会抛出中断异常?

java - 有没有可以排序的 CopyOnWriteArrayList 的替代方案?