Celery 异步任务队列高级用法 以及 3种调用任务的方法详解

一、Celery 对象解析

  • 我们先来看一下 Celery 的初始化方法:

    class Celery(object):
        def __init__(self, main=None, loader=None, backend=None,
                     amqp=None, events=None, log=None, control=None,
                     set_as_current=True, accept_magic_kwargs=False,
                     tasks=None, broker=None, include=None, changes=None,
                     config_source=None, fixups=None, task_cls=None,
                     autofinalize=True, **kwargs):
    
  • 常用的需要配置的参数:
    这些参数都是 celery 实例化的配置,我们也可以不写,可以使用config_from_object方法加载配置;

    main    : 如果作为__main__运行,则为主模块的名称。用作自动生成的任务名称的前缀
    loader  : 当前加载器实例。
    backend : 任务结果url;
    amqp    : AMQP对象或类名,一般不管;
    log     : 日志对象或类名;
    set_as_current : 将本实例设为全局当前应用
    tasks   : 任务注册表。
    broker  : 使用的默认代理的URL,任务队列;
    include : 每个worker应该导入的模块列表,以实例创建的模块的目录作为起始路径;
    

二、创建异步任务的方法 task

任何被 task 修饰的方法都会被创建一个 Task 对象,变成一个可序列化并发送到远程服务器的任务;它有多种修饰方式:

  • 方式一:使用默认的参数

    @celery.task
    def function_name():
        pass
    
  • 方式二:指定相关参数

    @celery.task(bind=True, name='name')
    def function_name():
        pass
    
    # task方法参数
    name       : 可以显式指定任务的名字;默认是模块的命名空间中本函数的名字。
    serializer : 指定本任务的序列化的方法;
    bind       : 一个bool值,设置是否绑定一个task的实例,如果绑定,task实例会作为参数传递到任务方法中,可以访问task实例的所有的属性,即前面反序列化中那些属性
    base       : 定义任务的基类,可以以此来定义回调函数,默认是Task类,我们也可以定义自己的Task类
    default_retry_delay : 设置该任务重试的延迟时间,当任务执行失败后,会自动重试,单位是秒,默认3分钟;
    autoretry_for       : 设置在特定异常时重试任务,默认False即不重试;
    retry_backoff       : 默认False,设置重试时的延迟时间间隔策略;
    retry_backoff_max   : 设置最大延迟重试时间,默认10分钟,如果失败则不再重试;
    retry_jitter        : 默认True,即引入抖动,避免重试任务集中执行;
    
    
    # 当bind=True时,add函数第一个参数是self,指的是task实例
    @task(bind=
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值