我正在这个项目上实施resque,我需要杀死任何入队resque的功能。所以,我已经看到有一个dequeuing方法,它将从队列中删除作业。但是,如果这个工作已经启动,并且当前正在运行,那么是否会出现故障并终止这个过程?
同样重要的是:如果一个工作出了问题,我是否可以获得一个我可以做某事的句柄,或者是一个异常抛出?
答案 0 :(得分:0)
据我所知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
希望这个帮助
答案 1 :(得分:0)
这个问题的答案实际上是使用了resque gem的众多扩展之一,称为resque-status。这会处理工作者实例,为每个实例分配一个唯一的id(我可以使用它来识别它们,我最需要的功能)并为我提供一个在作业上调用的kill方法,这将保证作业将处理我下次调用他们的API的某个方法时杀死信号(不完全是一个kill并指定异常,但它总比没有好)。