4

我有一个如下所示的 .sh 文件:

ruby one.rb
ruby two.rb
ruby three.rb
ruby four.rb
ruby five.rb
ruby six.rb
ruby seven.rb
ruby eight.rb

这样做是一个一个地运行 ruby​​ 文件。我将如何同时启动前四个,并且在前四个完成后立即抓住下一组。不知道如何处理这个,任何建议表示赞赏。我想暂时避免使用 rake 并继续使用 shell。

4

3 回答 3

13

您是否尝试过使用&and wait

ruby one.rb &
ruby two.rb &
ruby three.rb &
ruby four.rb &
wait
ruby five.rb &
ruby six.rb &
ruby seven.rb &
ruby eight.rb &

http://tldp.org/LDP/abs/html/subshel​​ls.html

于 2013-06-05T20:56:21.353 回答
2

创建一个如下所示的文本文件:

 one.rb
 two.rb
 three.rb

...等等。称之为“工作”或任何你想要的。然后,假设您正在运行 Ubuntu 或类似系统:

 sudo apt-get install parallel
 parallel ruby < jobs

有关parallel命令的信息可在此处获得:http ://www.gnu.org/software/parallel/

于 2013-06-05T21:03:44.340 回答
0

不要避免耙。现在学习,以后受益。

require 'rake'
run = -> sym { system "ruby #{sym}.rb" }
u, v = [:one, :two, :three, :four ], [:five, :six, :seven, :eight]
u.each { |sym| task sym do run.( sym ) end }
multitask midpoint: u
v.each { |sym| task sym => :midpoint do run.( sym ) end }
multitask( all: v ).invoke
于 2013-06-05T20:57:36.973 回答