2013-10-08 52 views
30

目前,我有一個sidekiq工作是這樣的:獲取sidekiq執行作業立即

class SyncUser 
    include Sidekiq::Worker 

    def perform(user_id) 
    #do stuff 
    end 
end 

我把作業隊列是這樣的:

SyncUser.perform_async user.id 

這一切工作當然,但在調用perform_async和實際執行的作業之間有一點滯後。

我還有什麼可以告訴sidekiq立即執行工作嗎?

+3

使用sidekiq的全部想法是執行異步事物。如果您想直接執行它,請確保您有足夠的可用工作人員,或者在請求本身內執行它。 – jewilmeer

回答

64

這裏有兩個問題。

如果你想立即執行作業,在當前的環境下,你可以使用:

SyncUser.new.perform(user.id) 

如果你想減少被調度異步工作方式之間的延遲,當它在sidekiq工人的執行,你可以降低poll_interval設置:

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

poll_interval是工人如何頻繁地檢查隊列作業工人後端內的延遲。正在計劃和執行免費工作的工作之間的平均時間將爲poll_interval/2

+0

這是非常有用的信息。 – nathanengineer

+1

如果有人想知道,默認的poll_interval目前是15s。 https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs#checking-for-new-jobs –