2017-02-18 14 views
0

поэтому у меня есть эта работа, где она может быть запрошена несколько раз. однако, когда я запускаю sidekiq, я хочу, чтобы задания запускались по одной задаче за раз, в очереди. Я не могу найти функцию или способ сделать это, пожалуйста, помогите.Sidekiq активная работа, как запустить одну работу за раз? (non-concurrent run)

ответ

0

Вы можете в основном настроить sidekiq, так что ваша очередь работает FIFO, из того, что я читаю, вы хотите, дело в том, что sidekiq предназначен для обработки параллельного процесса, тем не менее, если вы хотите, вы можете изменить свой параллелизм на 1 так одна работа выполняется только тогда, или попробуйте что-то, что здесь указано.

https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency

0

Если вы хотите, чтобы убедиться, что только один экземпляр вашей ActiveJob Работа проходит в то время, а затем осуществить блокировку мьютекса. Это легко с драгоценным камнем, как redis-mutex (если вы уже используете Redis с sidekiq):

def perform 
    RedisMutex.with_lock(:your_lock_name, expire: XXX_SECONDS) do 
    # do something exclusively 
    rescue RedisMutex::LockError 
    Rails.logger.debug "Another job is running, exiting ..." 
    end 
end