0
通常、2つの部分に分割されたRubyレーキタスクを、1つの並列化されたレーキタスクとして手作業で(つまり2つの別々のタブで)実行しようとしています。rake parallel:main
:別のレーキタスクで別のレーキタスクを並列に実行する
namespace :parallel do
multitask main: [:job1, :job2]
task :job1 => :environment do
companies = (34320..34330).to_a
companies.each do |c|
puts "Running on company #{c} - #{Time.now}"
Rake::Task['parallel:my_task'].invoke("#{c}")
Rake::Task['parallel:my_task'].reenable
end
end
task :job2 => :environment do
companies = (34340..34350).to_a
companies.each do |c|
puts "Running on company #{c} - #{Time.now}"
Rake::Task['parallel:my_task'].invoke("#{c}")
Rake::Task['parallel:my_task'].reenable
end
end
task :my_task, [:c] => :environment do |t, args|
puts "Processing #{args[:c]} - #{Time.now}"
sleep 5
end
end
私は基本的なrakeタスクを並列で実行されていないことがわかりますmy_task
内からこれらのジョブタスクの中からTime.now
が並列に実行されますが、Time.now
出力に基づいていることがわかります。睡眠に基づいて、あなたが見ることができるように、最初のProcessing
は午前14時15分17秒で起こる
$ rake parallel:main
Running on company 34320 - 2017-06-15 14:15:17 -0400
Running on company 34340 - 2017-06-15 14:15:17 -0400
Processing 34320 - 2017-06-15 14:15:17 -0400
Processing 34340 - 2017-06-15 14:15:22 -0400
Running on company 34321 - 2017-06-15 14:15:22 -0400
Running on company 34341 - 2017-06-15 14:15:27 -0400
Processing 34321 - 2017-06-15 14:15:27 -0400
Running on company 34342 - 2017-06-15 14:15:32 -0400
Processing 34342 - 2017-06-15 14:15:32 -0400
Running on company 34322 - 2017-06-15 14:15:32 -0400
、そして夜02時15分22秒で第二:
これは、出力は次のようになります。私はこれらを同時に実行したいです - これをどのように達成できますか?