@rda1902

Callback после выполнения группы sidekiq задач?

Добрый день!
Переодически запускается rake задача и запускает фоновые задачи sidekiq с разными параметрами.
Feed.find_each do |feed| #может быть 1000 элементов
    FeedUpdate.perform_async(feed.id)
  end

Нужно как то получить оповещение, что эти фоновые задачи были выполнены (не важно успешно или нет).
Есть sidekiq batches, то что мне нужно, но он платный((
batch = Sidekiq::Batch.new
batch.description = "Batch description (this is optional)"
batch.on(:success, MyCallback)
batch.jobs do
  rows.each { |row| RowWorker.perform_async(row) }
end


накидал свой вариант
worker_ids = []
  Feed.find_each do |feed|
    worker_ids.push(FeedUpdate.perform_async(feed.id))
  end

  loop do
    sleep(0.5)
    in_progress = false
    worker_ids.each do |id|
      status = Sidekiq::Status::status(id)
      if (status == :queued) || (status == :working)
        in_progress = true
      end
    end
    break if in_progress == false
  end
Callback.run

Мой вариант, работает.
Есть ли еще варианты или похожие гемы?
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 1
@eoffsock
Кодер (Rails)
Смотрите, есть вот такой микроскоп: https://github.com/socialpandas/sidekiq-superworker
Можно им гвозди позабивать — расписать очередь задач, а в конце поставить задачу, которая дернет нужный callback.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы