我们编写的每个task其实都是celery.app.task.Task的实例,Task里面给我们提供了很多有用的方法,比常用的delay、apply_async、AsyncResult等,下面再介绍几个比较实用的方法。
1、on_failure
异步任务执行失败时,会执行这个回调方法。如果你想实现一个 异步任务执行失败时,需要发出告警邮件通知的功能,重写这个函数就可实现。
2、on_success
异步任务执行成功时,会执行这个回调方法。
3、on_retry
异步任务尝试重试时,会执行这个回调方法。
4、after_return
异步任务执行成功,并且return了一些内容,会执行这个回调方法。
5、update_state
你可以手动调用这个方法来更新任务状态。
6、send_error_email
异步任务执行失败时,并且配置了send_error_emails=True时,会执行这个回调方法。(需要在django中配置相关邮件参数)最新版本已经删掉了这个方法.
下面给几个代码实例:
from celery import Task
class CustomTask(Task):
def on_success(self, retval, task_id, args, kwargs):
print('异步任务成功')
return super(CustomTask, self).on_success(retval, task_id, args, kwargs)
def on_failure(self, exc, task_id, args, kwargs, einfo):
print('异步任务失败', exc)
return super(CustomTask, self).on_failure(exc, task_id, args, kwargs, einfo)
def after_return(self, status, retval, task_id, args, kwargs, einfo):
print(retval)
return super(CustomTask, self).after_return(status, retval, task_id, args, kwargs, einfo)
@celery_app.task(base=CustomTask)
def send_email():
print('开始执行发送邮件异步任务')
return {'message': '成功'}
或者:
@celery_app.task(on_success=lambda *args, **kwargs: print('开始执行发送邮件异步任务'))
def send_email():
print('开始执行发送邮件异步任务')
return {'message': '成功'}
打印结果:
"""
[2021-01-13 15:11:11,266: WARNING/MainProcess] ???[???]: celery@55Y72D0VY2BLTW2 ready.
[2021-01-13 15:11:11,267: DEBUG/MainProcess] basic.qos: prefetch_count->16
[2021-01-13 15:11:13,273: INFO/MainProcess] ???[???]: Received task: send_email.tasks.send_email[91ea495d-2104-41f2-b2ae-800710f451ad]
[2021-01-13 15:11:13,276: WARNING/Worker-1] send_email.tasks.send_email[91ea495d-2104-41f2-b2ae-800710f451ad]: 开始执行发送邮件异步任务
[2021-01-13 15:11:13,279: WARNING/Worker-1] send_email.tasks.send_email[91ea495d-2104-41f2-b2ae-800710f451ad]: 异步任务成功
[2021-01-13 15:11:13,279: WARNING/Worker-1] send_email.tasks.send_email[91ea495d-2104-41f2-b2ae-800710f451ad]: {'message': '成功'}
[2021-01-13 15:11:13,280: INFO/MainProcess] ???[???]: Task send_email.tasks.send_email[91ea495d-2104-41f2-b2ae-800710f451ad] succeeded in 0s: {'message': '成功'}
"""