我有一个长期的任务:
from celery import Celery
celery_app = Celery( 'myapp' )
# ...
@celery_app.task()
def myTask( *args, **kwargs ) :
# the task body
附加了task_revoked
处理程序:
from celery.signals import task_revoked
@task_revoked.connect ( sender=myTask, dispatch_uid="myTask" )
def revokeHandler( *args, request=None, **kwargs ) :
# the handler body
如果我启动任务然后正常将其撤消,则处理程序工作正常:
job_uuid = myTask.delay( *args, **kwargs )
# ...
res = AsyncResult( job_uuid )
res.revoke( terminate=True, signal='SIGKILL' )
res.forget()
但是如果我首先启动任务,然后重新启动celery worker(任务在重新启动后仍然存在),然后取消该处理程序,则不会被调用。
有办法使它工作吗?
在Python 3.4.3上将Celery 4.1.1与RabbitMQ服务器3.2.4结合使用