Celery Task中一些有用的回调函数

我们编写的每个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': '成功'}
"""

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值