【发布时间】:2013-09-25 18:06:51
【问题描述】:
我启动这个worker 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
这段代码实际上仍然容易受到竞争条件的影响,我认为原因之一是因为在获取解锁的图片和实际锁定它之间存在时间差距。
也许还有更多原因,有什么可靠的方法可以防止这种情况发生吗?
【问题讨论】:
标签: mysql ruby concurrency backgroundworker