2016-08-23 53 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)回调可以输出总时间。 –