2016-08-23 22 views
0

たとえば、いくつかのジョブをsidekiqキューにプッシュして、即座に非同期に実行するとします。私は、全体のプロセスが開始された時に教えてログメッセージを持っているし、もちろん、これは1つの非常に大きな欠陥を持っている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秒ごとにポーリングを続けるのは嫌です。それはまた、彼らが任意の順序で終了することを保証されていないので、キュー内の最後の仕事を完了した時間でDBまたはログを更新することがハッキーです。

これに対処するベストプラクティスはありますか?

ありがとうございます!

答えて

2

まあ、最善のアプローチは、Sidekiq Proを使用しているようだ:https://github.com/mperham/sidekiq/wiki/Batches

あなたがプログラムでバッチのステータスを取得することができます。

プロの使用やキューサイズの手動ポーリング以外の方法はありません。

+0

正解で、on(:success)コールバックは合計時間を出力できます。 –

関連する問題