我正在这个项目上实现 resque,我需要杀死任何排队到 resque 的东西的功能。所以,我已经看到有一种出列方法,它将从队列中删除作业。但是,如果这个作业已经开始并且正在运行,那么出队会杀死进程吗?
同样重要的是:如果作业出队,我是否获得了可以做某事的句柄,还是抛出异常?
我正在这个项目上实现 resque,我需要杀死任何排队到 resque 的东西的功能。所以,我已经看到有一种出列方法,它将从队列中删除作业。但是,如果这个作业已经开始并且正在运行,那么出队会杀死进程吗?
同样重要的是:如果作业出队,我是否获得了可以做某事的句柄,还是抛出异常?
据我所知,如果它存在don't kill
,它只是从队列中删除作业检查这里process
但是,如果您想实现杀死工作,那么您需要使用 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
希望这有帮助
这个问题的答案实际上是使用 resque gem 的众多扩展之一,称为 resque-status。这处理工作实例,为每个实例分配一个唯一的 id(我可以用它来识别它们,我最需要的功能),并为我提供了一个在作业上调用的 kill 方法,这将保证作业将被处理下次我调用他们 API 的某个方法时发出 kill 信号(不完全是 kill 和 assign 异常,但总比没有好)。