如何重置Celery Task的时间限制

时间:2017-03-28 11:58:42

标签: python celery

我没有使用Celery的经验,所以如果我的用例可以在芹菜中解决的话,我会调查它。

客户端将向Celery提交作业,此作业将在CeleryTask中执行。然后客户端必须每30秒发送一次keepalive以保持此工作活动。一旦keepalive消息没有刷新作业,该作业将被取消。

我可以想到两个解决方案:

  1. 创建的每个作业任务都有30秒的硬限制。当客户端发送keepalive时,路由器将向相关工作人员发送消息以重置硬时限。

  2. 每个工作任务都没有时间限制。对于每个工作任务,将启动另一个特殊的监视任务。看门狗任务将推迟30秒。如果从客户端到达新的keepalive,则会取消并重新创建监视任务。再次延迟30秒。如果监视程序被执行,它将终止作业任务,从而将其从系统中删除。

  3. 1.更简单,但我不确定如何重置任务时间限制。解决方案2.似乎更正确,但我担心会有各种竞争条件。看门狗任务应该可能在为监视器保留的单独队列中运行。

    这样的事情怎么可能?甚至是我的解决方案之一或其他一些。

1 个答案:

答案 0 :(得分:0)

根据我的理解,您只想拥有middleware(一个接收keepalive,以控制任务),然后此链接将帮助您celery.app.control.Control.terminate

  1. task_idapply_asyncdestination
  2. 时获取all workers任务
  3. 从客户
  4. 收听keepalive
  5. 如果time limit到达并且没有keepaliveterminate任务app.control.terminate(task_id, reply=True)