我有一个带有Resque的rails应用程序。如果一个工作线程失败,我想杀死所有与模型相关的工作线程,这些工作线程生成了该工作线程。
我知道我可以得到 Resque.workers,但遍历它们将显示 :空闲 对于排队的工人。
执行 Resque.queues 会将队列作为数组返回,我可以获取它们的大小,但是我如何访问正在等待的工作线程?
我想要这样的东西:
parent_id = 999
Resque.queues.each do |q|
q.workers.each do |w|
if w.job.payload.args[0] == parent_id.to_s?
#kill worker
end
end
end
Resque::Worker.working
应该为您提供所有非空闲工作线程的集合。 您可以循环访问它们,并对要关闭的工作线程调用shutdown!
。 我将首先为每个worker
puts
worker.job
以查看其结构,以便您知道如何检查其参数是什么。 所以它应该是这样的
Resque::Worker.working.each do |worker|
worker.shutdown! if worker.job["something"]["maybe_something_else"] == parent_id.to_s
end