我正在使用芹菜2.4.1与python 2.6,rabbitmq后端和django。如果工人关闭,我希望我的任务能够正确清理。据我所知,你无法提供任务析构函数,所以我试着勾住worker_shutdown信号。
注意: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手动杀死它。
因此,如果这不是正确的方法,我该如何让任务正常关闭?