73

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

class SyncUser
  include Sidekiq::Worker

  def perform(user_id)
    #do stuff
  end
end

我正在这样的队列中放置一份工作:

SyncUser.perform_async user.id

当然,这一切都有效,但是在调用 perform_async 和实际执行的作业之间有一点延迟。

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

4

2 回答 2

133

这里有两个问题。

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

SyncUser.new.perform(user.id)

如果你想减少异步工作被调度和在 sidekiq worker 中执行之间的延迟,你可以减少poll_interval设置:

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

poll_interval是工作人员后端中工作人员检查队列中作业的频率的延迟。一个工作被安排和一个空闲工作人员执行之间的平均时间将是poll_interval / 2

于 2013-10-08T18:15:35.963 回答
-3

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

SyncUser.perform_now(user.id)
于 2020-07-30T19:59:04.947 回答