2017-06-15 4 views
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秒で第二:

これは、出力は次のようになります。私はこれらを同時に実行したいです - これをどのように達成できますか?

答えて

0

私はちょうどinvokeが依存関係を実行することを知りましたが、タスクがまだ呼び出されていない場合にのみ実行します(source)。

コードを次のように変更してもうまくいきます。 Rake::Task['parallel:my_task'].execute :c => c

関連する問題