跟踪Sidekiq中各种异步后台作业的运行时间

时间:2016-08-23 21:57:54

标签: ruby-on-rails asynchronous 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秒继续轮询以查看队列是否为空。让队列中的最后一个作业用完成的时间更新数据库或日志似乎也很麻烦,因为他们没有保证以任何顺序完成。

有接近此方法的最佳做法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

嗯,最好的方法似乎是使用Sidekiq Pro:https://github.com/mperham/sidekiq/wiki/Batches

您可以通过编程方式获取批处理的状态。

除了手动使用pro或轮询队列大小外,我还看不到任何其他方式。