【问题标题】:Resque: Does dequeueing kill the process?Resque:出队会杀死进程吗?
【发布时间】:2013-08-14 19:08:30
【问题描述】:

我正在这个项目上实现 resque,我需要杀死任何排队到 resque 的东西的功能。所以,我看到有一个出队方法,它会从队列中删除作业。但是,如果该作业已经开始并且当前正在运行,那么出队是否会终止该进程?

同样重要的是:如果作业出队,我是否会获得可以做某事的句柄,或者是否会引发异常?

【问题讨论】:

    标签: resque


    【解决方案1】:

    据我所知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

    希望有帮助

    【讨论】:

    • 这看起来不错,但我需要分叉的 pid。我在哪里可以找到它?是存储在redis中的吗?
    • @ChuckE 哦,没有简单的方法,因为 resque 不会这样做,我可能也错了 1) ps aux | grep [r]esque 2) 在你的工作代码中执行 Process.pid 并将它们存储在 redis有意义
    • 我不确定。 resque 分叉了许多进程,这意味着在某个给定点我可能有许多进程,它们会意外中止。 Resque.dequeue 允许我通过作业类和参数删除队列中的一些作业。我想对流程做同样的事情。我想这在图书馆里更有意义,如果还没有,我可能会建议这个功能。
    • @ChuckE 哦,你想很好地找到可以使用 resque 找到的中止过程
    【解决方案2】:

    这个问题的答案实际上是使用 resque gem 的众多扩展之一,称为 resque-status。这处理工作实例,为每个实例分配一个唯一的 id(我可以用它来识别它们,我最需要的功能),并为我提供了一个在作业上调用的 kill 方法,这将保证作业将被处理下次我调用他们 API 的某个方法时发出 kill 信号(不完全是 kill 和 assign 异常,但总比没有好)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-02
      • 2016-07-08
      • 2016-01-24
      • 1970-01-01
      • 2015-02-18
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多