2013-10-08 10 views
30

Im Moment auszuführen, ich habe einen sidekiq Job wie folgt aus:sidekiq Holen Sie sich einen Job sofort

class SyncUser 
    include Sidekiq::Worker 

    def perform(user_id) 
    #do stuff 
    end 
end 

ich in der Warteschlange wie diese einen Job am Abdrucken:

SyncUser.perform_async user.id 

Dies alles funktioniert Natürlich gibt es eine gewisse Verzögerung zwischen dem Aufruf von perform_async und dem Job, der tatsächlich ausgeführt wird.

Gibt es noch etwas, was ich tun kann, um Sidekiq zu sagen, den Job sofort auszuführen?

+3

Die ganze Idee der Verwendung von sidekiq ist Dinge async durchzuführen. Wenn Sie es direkt ausführen möchten, stellen Sie sicher, dass genügend Mitarbeiter verfügbar sind, oder führen Sie es innerhalb der Anforderung selbst aus. – jewilmeer

Antwort

64

Hier sind zwei Fragen.

Wenn Sie einen Job sofort ausgeführt werden sollen, im aktuellen Kontext können Sie:

SyncUser.new.perform(user.id) 

Wenn Sie die Verzögerung zwischen asynchroner Arbeit verringern wollen mehr geplant, und wenn es in dem sidekiq Arbeiter ausgeführt ist, Sie die poll_interval Einstellung abnehmen kann:

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

die poll_interval ist die Verzögerung innerhalb Arbeiter Backends, wie häufig Arbeiter überprüfen Jobs in der Warteschlange. Die durchschnittliche Zeit zwischen einem Job, der geplant und mit einem freien Mitarbeiter ausgeführt wird, ist poll_interval/2.

+0

Dies ist so nützliche Informationen. – nathanengineer

+1

Falls jemand sich fragt, ist der Standard poll_interval derzeit 15s. https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs#checking-for-new-jobs –

Verwandte Themen