【发布时间】:2013-08-14 19:08:30
【问题描述】:
我正在这个项目上实现 resque,我需要杀死任何排队到 resque 的东西的功能。所以,我看到有一个出队方法,它会从队列中删除作业。但是,如果该作业已经开始并且当前正在运行,那么出队是否会终止该进程?
同样重要的是:如果作业出队,我是否会获得可以做某事的句柄,或者是否会引发异常?
【问题讨论】:
标签: resque
我正在这个项目上实现 resque,我需要杀死任何排队到 resque 的东西的功能。所以,我看到有一个出队方法,它会从队列中删除作业。但是,如果该作业已经开始并且当前正在运行,那么出队是否会终止该进程?
同样重要的是:如果作业出队,我是否会获得可以做某事的句柄,或者是否会引发异常?
【问题讨论】:
标签: resque
据我所知don't kill process 它只是从队列中删除作业,如果它存在检查here
但如果你想实现杀死工作,那么你需要使用 resque 提供的各种信号
这里是他们的列表
Resque workers respond to a few different signals:
QUIT - Wait for child to finish processing then exit
TERM / INT - Immediately kill child then exit
USR1 - Immediately kill child but don't exit
USR2 - Don't start to process any new jobs
CONT - Start to process new jobs again after a USR2
如果是USR1
希望有帮助
【讨论】:
ps aux | grep [r]esque 2) 在你的工作代码中执行 Process.pid 并将它们存储在 redis有意义
这个问题的答案实际上是使用 resque gem 的众多扩展之一,称为 resque-status。这处理工作实例,为每个实例分配一个唯一的 id(我可以用它来识别它们,我最需要的功能),并为我提供了一个在作业上调用的 kill 方法,这将保证作业将被处理下次我调用他们 API 的某个方法时发出 kill 信号(不完全是 kill 和 assign 异常,但总比没有好)。
【讨论】: