繁体   English   中英

如何在Ruby命令中并行启动

[英]How to launch in Ruby commands in parallel

我正在使用ruby编写一个终端程序,该终端程序是用C ++和Java编写的一组程序的启动程序,应在分布式系统中执行。

我想将此指令翻译成红宝石:

for i in {1..40}; do
  ssh node$i program & #note & so that that process is detached
done

这是我的红宝石代码:

class Launcher
   # Other method that we can ignore
   def order(command)
     @nodelist.each {#Do something here}
   end 
end 

我虽然要创建一个线程池,然后每个线程都执行该命令。 这是合适的方法吗? 正如我研究的那样,线程无法执行“ exec”,因为线程共享相同的内存地址。

解决方法如下:

class Launcher

  def initialize(commands_list)
    #Expected to be an array of command string
    @commands_list = commands_list
  end

  def execute
    p_threads = @commands_list.map do |command|
      Process.detach(Process.spawn(command))
    end
    p_threads.each(&:join)
   end
end

您知道GNU parallel吗? 它是为并行运行作业而准备的(惊奇!)。 它是由经验丰富的人开发,测试和尝试的。 您可能只使用它,而不是重新实现大多数。 或者,您可以查看其手册和/或源代码,也可以从中学习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM