我正在尝试使用delayed_job来处理冗长的任务,但在我的控制器中,当我添加延迟作业时,有一个非常显着的延迟,从不到50毫秒到超过1000毫秒,这不是我预期的。有没有人遇到这个问题并知道解决方法?
答案 0 :(得分:1)
延迟作业是基于数据库的,因此,如果您的数据库处于负载状态,可以解释为什么需要50到1000毫秒。
看看Sidekiq,它使用Redis来处理队列,这样你的性能就不会与数据库绑定。
答案 1 :(得分:0)
有一个名为sleep_delay
的配置,这意味着当队列中没有作业时,delayed_job会在[sleep_time]秒内进入休眠状态,即插入空队列的第一个作业可能会在[sleep_delay]中延迟如果您的队列始终为空,则会经常发生。尝试调整此配置,看看情况是否有所改善。
另一种可能的情况是队列中的作业太多而工作人员无法立即处理它们。如果您的作业需要很长时间才能运行并且只使用一个工作人员,则会发生这种情况如果是这种情况,请尝试在项目中使用多个worker。