让sidekiq立即执行一份工作

时间:2013-10-08 15:28:16

标签: ruby sidekiq

目前,我有一个像这样的sidekiq工作:

class SyncUser
  include Sidekiq::Worker

  def perform(user_id)
    #do stuff
  end
end

我正在这样的队列中找到一份工作:

SyncUser.perform_async user.id

当然这一切都有效但调用perform_async和实际执行的作业之间存在一点滞后。

我还能做些什么来告诉sidekiq立即执行这项工作吗?

2 个答案:

答案 0 :(得分:85)

这里有两个问题。

如果要立即执行作业,可以在当前上下文中使用:

SyncUser.new.perform(user.id)

如果您想减少正在安排的异步工作与在sidekiq工作中执行的异步工作之间的延迟,您可以减少poll_interval设置:

Sidekiq.configure_server do |config|
  config.poll_interval = 2
end

poll_interval是工作人员后端工作人员检查队列中作业频率的延迟。与免费工作人员安排和执行的工作之间的平均时间为poll_interval / 2

答案 1 :(得分:-2)

对于通过Active Job框架使用Sidekiq的用户,您可以这样做

SyncUser.perform_now(user.id)
相关问题