目前,我有一个像这样的sidekiq工作:
class SyncUser
include Sidekiq::Worker
def perform(user_id)
#do stuff
end
end
我正在这样的队列中找到一份工作:
SyncUser.perform_async user.id
当然这一切都有效但调用perform_async和实际执行的作业之间存在一点滞后。
我还能做些什么来告诉sidekiq立即执行这项工作吗?
答案 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)