当前我有以下代码在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个脚本,直到我达到需要运行的脚本数量。有没有一种简单的方法来实现这一目标?
答案 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的好处。