2013-10-08 12 views
30

Al momento, ho un lavoro sidekiq come questo:Get sidekiq per eseguire un lavoro immediatamente

class SyncUser 
    include Sidekiq::Worker 

    def perform(user_id) 
    #do stuff 
    end 
end 

sto mettendo un lavoro sulla coda in questo modo:

SyncUser.perform_async user.id 

Questa tutte le opere ovviamente, ma c'è un po 'di ritardo tra la chiamata a perform_async e il lavoro che viene effettivamente eseguito.

C'è qualcos'altro che posso fare per dire sidekiq per eseguire immediatamente il lavoro?

+3

l'idea di utilizzare sidekiq è eseguire le operazioni asincrone. Se desideri eseguirlo direttamente, assicurati di avere abbastanza lavoratori disponibili, o eseguilo all'interno della richiesta stessa. – jewilmeer

risposta

64

Ci sono due domande qui.

Se si desidera eseguire immediatamente un posto di lavoro, nel contesto attuale è possibile utilizzare:

SyncUser.new.perform(user.id) 

Se si vuole diminuire il ritardo tra il lavoro asincrono essere programmato e quando è eseguito nella operaio sidekiq, è possono diminuire l'impostazione poll_interval:

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

il poll_interval è il ritardo nel backend dei lavoratori di quanto frequentemente operai controllano per i lavori sulla coda. Il tempo medio tra un lavoro pianificato ed eseguito con un lavoratore libero sarà poll_interval/2.

+0

Queste sono informazioni utili. – nathanengineer

+1

Nel caso ci si stia chiedendo, il poll_interval predefinito è attualmente 15s. https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs#checking-for-new-jobs –

Problemi correlati