【问题标题】:Tracking run time of various asynchronous background jobs in Sidekiq在 Sidekiq 中跟踪各种异步后台作业的运行时间
【发布时间】:2016-08-23 21:57:53
【问题描述】:

假设我将几个作业推送到 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 秒轮询一次以查看队列是否为空。让队列中的最后一个作业更新数据库或使用完成时间记录似乎也很麻烦,因为不能保证它们以任何顺序完成。

是否有解决此问题的最佳做法?

谢谢!

【问题讨论】:

    标签: ruby-on-rails asynchronous sidekiq


    【解决方案1】:

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

    您可以通过编程方式获取 Batch 的状态。

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

    【讨论】:

    • 正确,on(:success)回调可以输出总时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多