web-dev-qa-db-fra.com

Obtenez sidekiq pour exécuter un travail immédiatement

En ce moment, j'ai un travail de sidekiq comme celui-ci:

class SyncUser
  include Sidekiq::Worker

  def perform(user_id)
    #do stuff
  end
end

Je place un travail dans la file d'attente comme ceci:

SyncUser.perform_async user.id

Tout cela fonctionne bien sûr, mais il y a un peu de décalage entre l'appel de perform_async et l'exécution effective du travail.

Puis-je faire autre chose pour dire à sidekiq d'exécuter le travail immédiatement?

47
dagda1

Il y a deux questions ici.

Si vous souhaitez exécuter un travail immédiatement, dans le contexte actuel, vous pouvez utiliser:

SyncUser.new.perform(user.id)

Si vous souhaitez réduire le délai entre la planification d'un travail asynchrone et son exécution dans le programme de travail sidekiq, vous pouvez réduire le poll_interval réglage:

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

Le poll_interval est le délai dans les backends de travail de la fréquence à laquelle les travailleurs vérifient les travaux dans la file d'attente. Le temps moyen entre la planification et l'exécution d'un travail avec un travailleur libre sera de poll_interval / 2.

88
Winfield