Ruby on rails Sidekiq列出所有作业[排队运行]
是否有方法获取队列中当前正在运行的所有作业的列表?基本上,我想知道给定类的作业是否已经存在,我不想插入其他作业。我见过其他的选择,但我想这样做 我可以看到如何获取队列中的作业列表Ruby on rails Sidekiq列出所有作业[排队运行],ruby-on-rails,ruby,sidekiq,Ruby On Rails,Ruby,Sidekiq,是否有方法获取队列中当前正在运行的所有作业的列表?基本上,我想知道给定类的作业是否已经存在,我不想插入其他作业。我见过其他的选择,但我想这样做 我可以看到如何获取队列中的作业列表 queue = Sidekiq::Queue.new("mailer") queue.each do |job| job.klass # => 'MyWorker' end 据我所知,这不包括处理/运行作业。有没有办法获取它们?如果您想从控制台列出当前正在运行的所有作业,请尝试以下操作 workers =
queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
job.klass # => 'MyWorker'
end
据我所知,这不包括处理/运行作业。有没有办法获取它们?如果您想从控制台列出当前正在运行的所有作业,请尝试以下操作
workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
p work
end
工作
是散列
列出所有队列数据
queues = Sidekiq::Queue.all
queues.each do |queue|
queue.each do |job|
p job.klass, job.args, job.jid
end
end
对于特定队列,将其更改为Sidekiq::queue.new('queue\u name')
类似地,您可以使用
Sidekiq::ScheduledSet.new
获取所有计划作业,假设您在排队时将散列作为参数传递给Sidekiq
args = {
"student_id": 1,
"student_name": "Michael Moore"
}
YourWorker.perform_in(1.second,args)
然后,您可以在应用程序的任何位置检索它,如下所示
ss = Sidekiq::ScheduledSet.new
student_id_list = ss.map{|job| job['args'].first["student_id"]}
正在运行作业:
Sidekiq::Workers.new.each do|u进程_id、_线程_id、工作|
p工作
结束
跨所有队列排队的作业:
Sidekiq::Queue.all.each do |队列|
#p queue.name,queue.size
排队。每项任务|
p job.klass,job.args
结束
结束
当你使用sidekiq/api
检查工人时,你可以看到工人在做什么,这个答案可能已经过时了:我得到NoMethodError:undefined method
klass'`作业。klass
在2020年仍然可用。检查它是否像调用job.jid
一样生成以下错误:NoMethodError:undefined method
jid'for#`这是因为我们试图从队列中获取作业ID吗?请澄清一下:Sidekiq::queue.all将只输出正在进行的作业,而不是计划的作业。正如接受的答案所述,您需要使用Sidekiq::ScheduledSet.new来获取计划的作业。