[英]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.