2016-08-23 50 views
0

比方說,我將多個作業推送到sidekiq隊列中,以立即異步執行。我有日誌,告訴我,當整個過程已經開始的消息,並完成跟蹤Sidekiq中各種異步後臺作業的運行時間

start = Time.zone.now 
puts "Starting jobs" 

1000.times.each do 
    SomeWorker.perform_async(some_arg_id) 
end 

end_time = Time.zone.now 
runtime = end_time - start 
puts "Finished jobs - that took #{runtime} seconds" 

這當然有一個很大的缺陷 - 它輸出,當一切都推到隊列中,而不是作業時的作業已經完成有實際上完成。

我正在尋找一種方法來跟蹤一批作業的完成情況。我討厭每隔X秒輪詢一次以查看隊列是否爲空。隊列中的最後一項工作更新數據庫或記錄完成的時間似乎很棘手,因爲它們無法以任何順序完成。

有沒有最佳做法來解決這個問題?

謝謝!

回答

2

好,最好的辦法似乎使用Sidekiq臨:https://github.com/mperham/sidekiq/wiki/Batches

可以以編程方式獲取一個批次的狀態。

除了手工使用pro或輪詢隊列大小之外,我看不到任何其他方式。

+0

正確,on(:success)回調可以輸出總時間。 –