您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 通知工作者关闭的芹菜任务

5b51 2022/1/14 8:23:20 python 字数 2535 阅读 591 来源 www.jb51.cc/python

我正在使用芹菜2.4.1与 python 2.6,rabbitmq后端和django.如果工人关闭,我希望我的任务能够正确清理.据我所知,你无法提供任务析构函数,所以我试着勾住 worker_shutdown信号. 注意:AbortableTask仅适用于数据库后端,所以我无法使用它. from celery.signals import worker_shutdown @task def my

概述

注意:AbortableTask仅适用于数据库后端,所以我无法使用它.

from celery.signals import worker_shutdown

@task
def mytask(*args)

  obj = DoStuff()

  def shutdown_hook(*args):
     print "Worker shutting down"
     # cleanup nicely
     obj.stop()

  worker_shutdown.connect(shutdown_hook)

  # blocking call that monitors a network connection
  obj.stuff()

但是,永远不会调用shutdown hook. Ctrl-C’ing工作人员不会杀死任务,我必须从shell手动杀死它.

因此,如果这不是正确的方法,我如何允许任务正常关闭

However,the shutdown hook never gets called. Ctrl-C’ing the worker
doesn’t kill the task and I have to manually kill it from the shell.

工作人员永远不会在正常(暖)关闭下终止任务.
即使任务需要数天才能完成,工作人员也无法完成关闭
直到它完成.您可以将–soft-time-limit或–time-limit设置为
告诉实例什么时候可以终止任务.

因此,首先需要添加任何类型的流程清理过程
确保任务可以实际完成.因为清理不会
在那之前被召唤.

要向池工作进程添加清理步骤,您可以使用
就像是:

from celery import platforms
from celery.signals import worker_process_init

def cleanup_after_tasks(signum,frame):
    # reentrant code here (see http://docs.python.org/library/signal.html)

def install_pool_process_sighandlers(**kwargs):
    platforms.signals["TERM"] = cleanup_after_tasks
    platforms.signals["INT"] = cleanup_after_tasks

worker_process_init.connect(install_pool_process_sighandlers)

总结

以上是编程之家为你收集整理的python – 通知工作者关闭的芹菜任务全部内容,希望文章能够帮你解决python – 通知工作者关闭的芹菜任务所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶