一、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=

最低0.47元/天 解锁文章





