Подтвердить что ты не робот

Получить sidekiq для немедленного выполнения задания

На данный момент у меня есть работа sidekiq:

class SyncUser
  include Sidekiq::Worker

  def perform(user_id)
    #do stuff
  end
end

Я помещаю задание в очередь следующим образом:

SyncUser.perform_async user.id

Это все работает, но есть некоторое отставание между вызовом perform_async и выполняемым фактически выполнением.

Есть ли что-нибудь еще, что я могу сделать, чтобы сказать sidekiq немедленно выполнить задание?

4b9b3361

Ответ 1

Здесь есть два вопроса.

Если вы хотите немедленно выполнить задание, в текущем контексте вы можете использовать:

SyncUser.new.perform(user.id)

Если вы хотите уменьшить задержку между запланированной асинхронной работой и когда она выполняется в рабочем компоненте sidekiq, вы можете уменьшить параметр poll_interval:

Sidekiq.configure_server do |config|
  config.poll_interval = 2
end

poll_interval - это задержка внутри рабочего стола, как часто рабочие проверяют наличие заданий в очереди. Среднее время между заданием, которое запланировано и выполняется со свободным работником, будет poll_interval / 2.