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?
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
.