그래서 여러 번 요청할 수있는 작업이 있습니다. 그러나, 내가 sidekiq를 실행할 때, 나는 한 번에 하나의 작업을 대기열에 넣기를 바란다. 나는 실제로이 일을 할 수있는 기능이나 방법을 찾지 못했습니다. 도와주세요.Sidekiq 활성 작업, 한 번에 하나의 작업을 실행하는 방법? (비 동시성 실행)
0
A
답변
0
기본적으로 sidekiq를 조정할 수 있으므로 내가 읽고있는 것에서 대기열 작업 FIFO를 원하는대로 선택할 수 있습니다. sidekiq는 병렬 프로세스를 처리하기위한 것이지만 그럼에도 동시성을 1로 변경할 수 있습니다. 한 번에 하나의 직업 만이 시간에 실행되거나 여기에 무슨 일이 일어나는지 시험해보십시오.
https://github.com/mperham/sidekiq/wiki/Best-Practices#3-embrace-concurrency
0
당신이 특정 ActiveJob 작업의 하나의 인스턴스 만 한 번에 실행이 있는지 확인하려면 다음 뮤텍스 잠금을 구현합니다. redis-mutex과 같은 보석으로 쉽게 할 수 있습니다 (이미 사이드 키가있는 레디 스를 사용하는 경우) :
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