目前,我有这样的sidekiq工作:
class SyncUser
include Sidekiq::Worker
def perform(user_id)
#do stuff
end
end
我正在这样的队列中放置一份工作:
SyncUser.perform_async user.id
当然,这一切都有效,但是在调用 perform_async 和实际执行的作业之间有一点延迟。
我还能做些什么来告诉 sidekiq 立即执行这项工作吗?
这里有两个问题。
如果要立即执行作业,可以在当前上下文中使用:
SyncUser.new.perform(user.id)
如果你想减少异步工作被调度和在 sidekiq worker 中执行之间的延迟,你可以减少poll_interval
设置:
Sidekiq.configure_server do |config|
config.poll_interval = 2
end
这poll_interval
是工作人员后端中工作人员检查队列中作业的频率的延迟。一个工作被安排和一个空闲工作人员执行之间的平均时间将是poll_interval / 2
。
对于那些通过 Active Job 框架使用 Sidekiq 的人,您可以这样做
SyncUser.perform_now(user.id)