Ruby on rails 非常慢,请稍后调用ActiveJob和Sidekiq

Ruby on rails 非常慢,请稍后调用ActiveJob和Sidekiq,ruby-on-rails,sidekiq,rails-activejob,Ruby On Rails,Sidekiq,Rails Activejob,我有一个日程表作业: class SchedulerJob < ActiveJob::Base queue_as :scheduler def perform logger.debug("Start") DelayedJob.set(wait: 10.seconds).perform_later logger.debug("After Job 1") DelayedJob.set(wait: 20.seconds).perform_later

我有一个
日程表作业

class SchedulerJob < ActiveJob::Base
  queue_as :scheduler

  def perform
    logger.debug("Start")
    DelayedJob.set(wait: 10.seconds).perform_later
    logger.debug("After Job 1")
    DelayedJob.set(wait: 20.seconds).perform_later
    logger.debug("After Job 2")
    DelayedJob.set(wait: 30.seconds).perform_later
    logger.debug("End")
  end
end
class DelayedJob < ActiveJob::Base
  queue_as :delayed_jobs

  def perform
    puts "I'm done"
  end
end
如果调用
SchedulerJob.new.perform
,作业将在几毫秒内运行。如果我调用
SchedulerJob.perform\u later
在Sidekiq中运行作业,大约需要90秒才能完成,通过查看日志,我可以看出这些
.perform\u later
调用每次大约需要30秒

为什么会发生这种情况?

顾名思义

  • 排队系统空闲时将立即执行
    稍后执行
  • 无论您的队列状态如何,都将执行
    perform

  • 我的猜测是,当您稍后调用
    perform\u
    时,队列中有一些作业正在运行。

    问题在于初始值设定项

    我猜你已经破坏了所有的并发性,因为你在池中入侵了一个全局$REDIS连接。不要那样做。让Sidekiq创建和管理连接池


    这只意味着作业需要更长的时间来执行,但并不影响排队所需的时间。