我在一个运行多个工作进程的设置中使用Delayed Job。 对于我的问题来说,这并不重要,但是让我们假设我运行了10个工作进程(目前在开发模式下运行)。
我的问题是有时两个不同的工作进程会开始处理相同的作业,调用我的作业对象上的perform方法。
据我所知,Delayed Job使用悲观锁定来防止这种情况发生,但是它似乎有时仍然有足够的时间来窃取作业,以至于第一个工作进程没有时间将其锁定。
我只是想问问是否还有其他人遇到过这个问题,或者是我的设置出了问题。我正在使用Postrgres,并且这种情况在我开发机器和我托管它的Heroku上都会发生。
我将尝试在我的作业内解决它,但是这仍然有点棘手。理想情况下,Delayed Job永远不会处理来自两个进程的相同作业。
谢谢!
Delayed::Worker.read_ahead=1
似乎可以缓解这个问题。 - Rob Di Marco