मेरा प्रारंभिक सुझाव इस विशिष्ट कार्य के लिए एक म्यूटेक्स होगा। लेकिन चूंकि इस बात की संभावना है कि आपके पास साइडकीक कार्य करने वाले कई एप्लिकेशन सर्वर हो सकते हैं, मैं रेडिस स्तर पर कुछ सुझाव दूंगा।
उदाहरण के लिए, redis-semaphore का उपयोग करें आपकी साइडकीक कार्यकर्ता परिभाषा के भीतर। एक परीक्षण न किया गया उदाहरण :
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