Есть ли «group asyn c wait» для задач sidekiq? - PullRequest
0 голосов
/ 03 августа 2020

Like javascript Promise.all может дождаться завершения всех запросов и затем выполнить следующее задание.

Например, у меня есть задачи A, B, C:

C требует, чтобы A и B были завершены для запуска и использовали результаты, вычисленные A и B.

(поскольку все 3 процесса являются очень дорогостоящими вычислениями, поэтому они помещаются в очередь sidekiq для запуска)

1 Ответ

6 голосов
/ 03 августа 2020

Используйте Sidekiq Batches, который доступен с Sidekiq Pro.

Пакеты позволят вам организовать ваши задания таким образом и позволить A и B работать параллельно. После завершения пакета вы можете назначить обратный вызов и запустить C. Подробнее об обратных вызовах читайте здесь .

class MyCallback
  def on_success(status, options)
    # Initiate call for C
  end
end

batch = Sidekiq::Batch.new
batch.on(:success, MyCallback)
batch.jobs do
  [a, b].each { |job| GenericJobWorker.perform_async(job) }
end
puts "Just started Batch #{batch.bid}"
...