我開始這名工人的10倍,給它的併發感:如何防止多名工人競相處理相同的任務?
class AnalyzerWorker
@queue = :analyzer
def self.perform
loop do
# My attempt to lock pictures from other worker instances that may
# try to analyze the same picture (race condition)
pic = Pic.where(locked: false).first
pic.update_attributes locked: true
pic.analyze
end
end
end
這段代碼實際上仍然是脆弱的競爭條件,我認爲原因之一是因爲有時間獲取解鎖之間的間隙圖片,並實際上鎖定它。
也許有更多的原因,任何強大的方法來防止這種情況?
有沒有進展?這有幫助嗎?還有什麼我可以做的? –
這是否解決了您的問題?如果不是,你有問題嗎?如果是的話,你能接受嗎?謝謝... –