2016-08-23 4 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 Pro: https://github.com/mperham/sidekiq/wiki/Batches

Вы можете получить статус Batch программно.

Я не вижу другого способа, кроме использования про или опроса размера очереди вручную.

+0

Правильно, и ответ на вызов (: success) может выводить общее время. –

Смежные вопросы