簡體   English   中英

在另一個rake任務上並行運行rake多任務

[英]Running rake multitask on another rake task in parallel

我正在嘗試設置一個Ruby rake任務,我通常將其手動分為兩部分(即,在兩個單獨的選項卡中運行),作為一個並行化的rake任務,以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

我可以看到Time.now從這些工作任務中並行運行,但基於Time.now輸出從內部my_task我可以看到下面的rake任務是不是並行運行。

輸出如下所示:

$ 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

如您所見,基於睡眠,第一次Processing發生在14:15:17,第二次Processing發生在14:15:22。 我希望它們可以同時運行-如何實現呢?

是的,我剛剛了解到invoke執行依賴關系,但是只有在尚未被調用的情況下才執行任務( source )。

所以我將代碼更改為以下代碼,並且效果很好: Rake::Task['parallel:my_task'].execute :c => c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM