2013-10-08 3 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

ここに2つの質問があります。

あなたが使用することができ、現在のコンテキストでは、すぐにジョブを実行する場合:あなたはそれがsidekiqワーカーで実行されますときにスケジュールとされている非同期の作業の間の遅延を減少させたい場合は

SyncUser.new.perform(user.id) 

、あなたは

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

poll_intervalは、労働者がキューのジョブをチェックする頻度の労働者のバックエンド内の遅延がある:poll_interval設定値を小さくすることができます。スケジュールされているジョブとフリーワーカーで実行されたジョブの平均時間はpoll_interval/2です。

+0

これはそのような有用な情報です。 – nathanengineer

+1

誰かが不思議な場合、デフォルトのpoll_intervalは現在15秒です。 https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs#checking-for-new-jobs –

関連する問題