私の最初の提案は、この特定の仕事のミューテックスです。ただし、複数のアプリケーションサーバーがsidekiqジョブを実行している可能性があるため、redisレベルで何かを提案します。
たとえば、redis-semaphore を使用します sidekiqワーカー定義内。 テストされていない例 :
def perform
s = Redis::Semaphore.new(:map_reduce_semaphore, connection: "localhost")
# verify that this sidekiq worker is the first to reach this semaphore.
unless s.locked?
# auto-unlocks in 90 seconds. set to what is reasonable for your worker.
s.lock(90)
your_map_reduce()
s.unlock
end
end
def your_map_reduce
# ...
end