什么是并行运行Ruby脚本的正确方法?

时间:2015-08-14 01:43:19

标签: ruby-on-rails ruby automation

当前我有以下代码在ruby脚本中运行一些ruby脚本:

def run(base_directory, run_count)
  working_directory = base_directory.gsub("\n","")
  for i in 1..run_count
    system("ruby " + working_directory + i.to_s + "\\" + "main.rb " +   working_directory + i.to_s + "\\")
  end
end

然而,它按顺序运行脚本,但我需要它们并行运行。我有10个脚本要运行,我想一次运行5个脚本,直到我达到需要运行的脚本数量。有没有一种简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

刚发现这个宝石parallel。您可能必须像这样运行它:

results = Parallel.map(run_count.downto(1).to_a, :in_processes=>run_count){|i| system("ruby " + working_directory + i.to_s + "\\" + "main.rb " +   working_directory + i.to_s + "\\") }

答案 1 :(得分:0)

不确定正确的方式是什么,但我通常只运行一个从命令行执行某些操作的单行程序:

假设您有一个名为create_file_with_input.rb的文件可以执行任何操作,例如:File.open("file_#{ARGV[0]}.txt", 'a')

你可以这样做:

run_count = 5

%x(for i in `seq 0 #{run_count-1}`; do (ruby create_file_with_input.rb $i &); done)

这将创建5个文件,如(file_0.txt,file_1.txt,...,file_4.txt等)。调整它以适应上面的代码和BOOM。您有多个脚本正在运行。

你也可以使用fork,虽然我没有太多的个人经验。请参阅this question(或使用Google)分支子进程。这种方式还提供了获取子进程的PID的好处。