Django使用Celery异步职务队列的运用,Django使用Celery异步职责队列

一、简介

  Celery是由Python开发、简单、灵活、可信赖的分布式职分队列,其本质是劳动者消费者模型,生产者发送职责到新闻队列,消费者负责处理职责。Celery侧重于实时操作,但对调度支持也很好,其每一天能够处理数以百万计的任务。特点:

  • 不难易行:熟识celery的工作流程后,配置使用不难
  • 高可用:当任务执行破产或实行进程中爆发三番五次中断,celery会自动尝试重新履行职分
  • 快快:贰个单进度的celery每秒钟可处理上百万个任务
  • 利落:大致celery的逐条零部件都能够被扩展及自定制

利用场景举例:

  1.web行使:当用户在网站实行有个别操作须要相当短日子成功时,大家得以将那种操作交给Celery执行,直接重返给用户,等到Celery执行到位之后公告用户,大大提好网站的产出以及用户的体验感。

  2.职务场景:比如在运转场景下要求批量在几百台机器执行有个别命令只怕职务,此时Celery可以轻松化解。

  3.定时职分:向定时导数据报表、定时发送公告类似现象,即使Linux的安排职责能够帮笔者完结,但是充足不方便人民群众管理,而Celery能够提供管理接口和添加的API。

1 Celery简介

Celery是异步职分队列,能够独自于主进度运转,在主进度退出后,也不影响队列中的职分履行。

职分履行万分退出,重新启航后,会继续执行队列中的别的义务,同时能够缓存停止期直接受的劳作职分,这一个职能信赖于音信队列(MQ、Redis)。

Django使用Celery异步职务队列,djangocelery

1  Celery简介

Celery是异步任务队列,能够独立于主进程运营,在主进度退出后,也不影响队列中的职务履行。

职务履行万分退出,重新起动后,会继续执行队列中的别的任务,同时能够缓存结束时期接收的工作任务,这些职能信赖于音信队列(MQ、Redis)。

 

二 、架构&工作规律

  Celery由以下三片段组成:音讯中间件(Broker)、职责执行单元Worker、结果存款和储蓄(Backend),如下图:

  澳门葡京备用网址 1

办事规律:

  1. 任务模块Task包罗异步职分和定时职分。个中,异步职分平时在业务逻辑中被触发并发往音信队列,而定时职务由Celery
    Beat进度周期性地将任务发往音信队列;
  2. 职分执行单元Worker实时监视音讯队列获取队列中的任务履行;
  3. Woker执行完职责后将结果保存在Backend中;

1.1 Celery原理

澳门葡京备用网址 2

Celery的 架构 由三片段构成,音讯中间件(message
broker),职分执行单元(worker)和职分履行结果存款和储蓄(task result
store)组成。

新闻中间件:Celery本身不提供新闻服务,不过能够一本万利的和第1方提供的音信中间件集成。包蕴,
RabbitMQRedis ,  MongoDB  (experimental), 亚马逊 SQS
(experimental),CouchDB (experimental), SQLAlchemy (experimental),Django
OXC90M (experimental), IronMQ。推荐应用:RabbitMQ、Redis作为新闻队列。

Django使用Celery异步职务队列的运用,Django使用Celery异步职责队列。任务执行单元:Worker是Celery提供的义务履行的单元,worker并发的运作在分布式的连串节点中。

任务结果存款和储蓄:Task result
store用来存储Worker执行的职责的结果,Celery帮忙以分化方法存款和储蓄职分的结果,包含AMQP,
Redis,memcached, MongoDB,SQLAlchemy, Django OSportageM,Apache Cassandra,
IronCache

1  Celery简介

Celery是异步职务队列,能够独自于主进度运维,在主进度退出后,也不影响队列中的职分执行。

职务执行很是退出,重新启航后,会继续执行队列中的别的职务,同时可以缓存结束时期收受的做事职务,这些功用注重于新闻队列(MQ、Redis)。

 

1.1  Celery原理

 澳门葡京备用网址 3

 

Celery的架构由三局地组成,消息中间件(message
broker),职分履行单元(worker)和职分执行结果存款和储蓄(task result
store)组成。

  • 信息中间件:Celery自个儿不提供新闻服务,不过足以一本万利的和第③方提供的音信中间件集成。包含,RabbitMQRedis, MongoDB (experimental),
    亚马逊(Amazon) SQS (experimental),CouchDB (experimental), SQLAlchemy
    (experimental),Django O卡宴M (experimental),
    IronMQ。推荐使用:RabbitMQ、Redis作为信息队列。
  • 任务履行单元:Worker是Celery提供的职务执行的单元,worker并发的运维在分布式的连串节点中。
  • 职务结果存款和储蓄:Task result
    store用来存款和储蓄Worker执行的职分的结果,Celery援救以分裂方法存款和储蓄任务的结果,包蕴AMQP,
    Redis,memcached, MongoDB,SQLAlchemy, Django O汉兰达M,Apache Cassandra,
    IronCache

新闻中间件Broker

  新闻中间件Broker官方提供了举不胜举准备方案,辅助RabbitMQ、Redis、亚马逊(Amazon)SQS、MongoDB、Memcached 等,官方推荐RabbitMQ。

1.2Celery适用场景

异步职务处理:例如给登记用户发送短讯息只怕确认邮件职责。
大型任务:执行时间较长的天职,例如录像和图表处理,添加水印和转码等,须求实施职责时间长。
定时实施的天职:扶助职分的定时执行和设定时间实施。例如品质压测定时实施。

1.1  Celery原理

 澳门葡京备用网址 4

 

Celery的架构由三片段组成,新闻中间件(message
broker),任务履行单元(worker)和天职履行结果存款和储蓄(task result
store)组成。

  • 新闻中间件:Celery本身不提供音讯服务,不过足以方便的和第壹方提供的音信中间件集成。包含,RabbitMQRedis, MongoDB (experimental),
    Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy
    (experimental),Django O逍客M (experimental),
    IronMQ。推荐使用:RabbitMQ、Redis作为音讯队列。
  • 职责履行单元:Worker是Celery提供的职分履行的单元,worker并发的周转在分布式的种类节点中。
  • 义务结果存储:Task result
    store用来储存Worker执行的职务的结果,Celery支持以区别措施存款和储蓄任务的结果,包罗AMQP,
    Redis,memcached, MongoDB,SQLAlchemy, Django O牧马人M,Apache Cassandra,
    IronCache

1.2     Celery适用场景

  • 异步职责处理:例如给登记用户发送短消息或然确认邮件任务。
  • 特大型职务:执行时间较长的职务,例如录像和图片处理,添加水印和转码等,供给实施职分时间长。
  • 定时执行的天职:援助职责的定时执行和设定时间实施。例如质量压测定时进行。

 

职务履行单元Worker

  Worker是职务履行单元,负责从音讯队列中取出职务执行,它能够运行1个依旧三个,也足以运营在分歧的机器节点,那正是其达成分布式的大旨。

 2Celery开发环境准备

1.2     Celery适用场景

  • 异步职分处理:例如给登记用户发送短音信可能确认邮件职务。
  • 巨型义务:执行时间较长的任务,例如录像和图片处理,添加水印和转码等,必要进行职务时间长。
  • 定时执行的天职:帮衬职务的定时执行和设定时间执行。例如质量压测定时实施。

 

2      Celery开发条件准备

结果存款和储蓄Backend

  Backend结果存储官方也提供了重重的仓库储存格局扶助:RabbitMQ、 Redis、Memcached,SQLAlchemy,
Django O帕杰罗M、Apache Cassandra、Elasticsearch。

 2.1 环境准备

软件名称

版本号

说明

Linux

Centos 6.5(64bit)

操作系统

Python

3.5.2

Django

1.10

Web框架

Celery

4.0.2

异步任务队列

Redis

2.4

消息队列

2      Celery开发条件准备

2.1     环境准备

软件名称

版本号

说明

Linux

Centos 6.5(64bit)

操作系统

Python

3.5.2

 

Django

1.10

Web框架

Celery

4.0.2

异步任务队列

Redis

2.4

消息队列

 

三 、安装使用 

  此地本身动用的redis作为新闻中间件,redis安装能够参见

Celery安装: 

pip3 install celery

2.2     Celery安装

行使形式介绍:

Celery的周转信赖消息队列,使用时供给安装redis或然rabbit。

那里我们运用Redis。安装redis库:

sudo yum install redis

启动redis:

sudo service redis start

安装celery库

sudo pip install celery==4.0.2

2.1     环境准备

软件名称

版本号

说明

Linux

Centos 6.5(64bit)

操作系统

Python

3.5.2

 

Django

1.10

Web框架

Celery

4.0.2

异步任务队列

Redis

2.4

消息队列

 

2.2     Celery安装

动用方式介绍:

Celery的运行依赖消息队列,使用时索要设置redis大概rabbit。

此处我们应用Redis。安装redis库:

sudo yum install redis

  

启动redis:

sudo service redis start

 

安装celery库

sudo pip install celery==4.0.2

 

简短利用

  目录结构:

project/
├── __init__.py  
├── config.py
└── tasks.py

各目录文件注明:

__init__.py:开头化Celery以及加载配置文件

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from celery import Celery
app = Celery('project')                                # 创建 Celery 实例
app.config_from_object('project.config')               # 加载配置模块

config.py: 
Celery相关配置文件,更加多铺排参考:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd

BROKER_URL = 'redis://10.1.210.69:6379/0' # Broker配置,使用Redis作为消息中间件

CELERY_RESULT_BACKEND = 'redis://10.1.210.69:6379/0' # BACKEND配置,这里使用redis

CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间

CELERY_TIMEZONE='Asia/Shanghai'   # 时区配置

CELERY_IMPORTS = (     # 指定导入的任务模块,可以指定多个
    'project.tasks',
)

tasks.py :任务定义文件

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd

from project import app
@app.task
def show_name(name):
    return name

启动Worker:

celery worker -A project -l debug

逐一参数含义:

  worker: 代表第运行的剧中人物是work当然还有beat等别的剧中人物;

  -A :项目路线,那里本身的目录是project

  -l:运营的日记级别,越来越多参数使用celery –help查看

翻看日志输出,会意识大家定义的职分,以及有关陈设:

澳门葡京备用网址 5

 

  就算起步了worker,但是大家还需求通过delay或apply_async来将职分添加到worker中,那里大家因此交互式方法添加职责,并赶回AsyncResult对象,通过AsyncResult对象获得结果:

澳门葡京备用网址 6

AsyncResult除了get方法用于常用获取结果方法外还提以下常用艺术或质量:

  • state: 重返职务状态;
  • task_id: 再次来到职分id;
  • result: 重回职分结果,同get()方法;
  • ready(): 判断任务是还是不是以及有结果,有结果为True,不然False;
  • info(): 获取任务音信,暗中同意为结果;
  • wait(t):
    等待t秒后获得结果,若任务履行实现,则不等待直接拿走结果,若职责在执行中,则wait时期平素不通,直到超时报错;
  • successfu(): 判断职分是不是成功,成功为True,不然为False;

3Celery单独实施任务

2.2     Celery安装

运用方法介绍:

Celery的运作注重音信队列,使用时索要设置redis可能rabbit。

此处大家接纳Redis。安装redis库:

sudo yum install redis

  

启动redis:

sudo service redis start

 

安装celery库

sudo pip install celery==4.0.2

 

3      Celery单独执行任务

四 、进阶使用

  对于一般的天职以来或者知足不断大家的职务供给,所以还须求明白一些进阶用法,Celery提供了不少调度措施,例如职责编排、根据职分状态执行不一的操作、重试机制等,以下会对常用高阶用法进行描述。

 3.1编写职责

创建task.py文件

表达:那里伊始Celery实例时就加载了配备,使用的redis作为新闻队列和储存职责结果。

澳门葡京备用网址 7

运行celery:

$ celery -A task worker --loglevel=info

观察上边包车型客车打字与印刷,表明celery成功运营。

澳门葡京备用网址 8

3      Celery单独执行职分

3.1     编写职责

创建task.py文件

表明:那里开首Celery实例时就加载了配备,使用的redis作为音讯队列和存款和储蓄任务结果。

 澳门葡京备用网址 9

 

运行celery:

$ celery -A task worker --loglevel=info

探望下边包车型大巴打字与印刷,说明celery成功运转。

 澳门葡京备用网址 10

定时职分&安顿职务

  Celery的提供的定时任务重大靠schedules来成功,通过beat组件周期性将职分发送给woker执行。在示范中,新建文件period_task.py,并累加义务到安排文件中:

period_task.py:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from project import app
from celery.schedules import crontab

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(10.0, add.s(1,3), name='1+3=') # 每10秒执行add
    sender.add_periodic_task(
        crontab(hour=16, minute=56, day_of_week=1),      #每周一下午四点五十六执行sayhai
        sayhi.s('wd'),name='say_hi'
    )



@app.task
def add(x,y):
    print(x+y)
    return x+y


@app.task
def sayhi(name):
    return 'hello %s' % name

config.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd

BROKER_URL = 'redis://10.1.210.69:6379/0' # Broker配置,使用Redis作为消息中间件

CELERY_RESULT_BACKEND = 'redis://10.1.210.69:6379/0' # BACKEND配置,这里使用redis

CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间

CELERY_TIMEZONE='Asia/Shanghai'   # 时区配置

CELERY_IMPORTS = (     # 指定导入的任务模块,可以指定多个
    'project.tasks',
    'project.period_task', #定时任务
)

启动worker和beat:

celery worker -A project -l debug #启动work
celery beat -A  project.period_task -l  debug #启动beat,注意此时对应的文件路径

大家得以洞察worker日志:

澳门葡京备用网址 11

还是能够通过配备文件措施钦命定时和陈设职分,此时的安排文件如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd

from project import app
from celery.schedules import crontab

BROKER_URL = 'redis://10.1.210.69:6379/0' # Broker配置,使用Redis作为消息中间件

CELERY_RESULT_BACKEND = 'redis://10.1.210.69:6379/0' # BACKEND配置,这里使用redis

CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间

CELERY_TIMEZONE='Asia/Shanghai'   # 时区配置

CELERY_IMPORTS = (     # 指定导入的任务模块,可以指定多个
    'project.tasks',
    'project.period_task',
)

app.conf.beat_schedule = {
    'period_add_task': {    # 计划任务
        'task': 'project.period_task.add',  #任务路径
        'schedule': crontab(hour=18, minute=16, day_of_week=1),
        'args': (3, 4),
    },
'add-every-30-seconds': {          # 每10秒执行
        'task': 'project.period_task.sayhi',  #任务路径
        'schedule': 10.0,
        'args': ('wd',)
    },
}

此时的period_task.py只需求登记到woker中就行了,如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from project import app

@app.task
def add(x,y):
    print(x+y)
    return x+y


@app.task
def sayhi(name):
    return 'hello %s' % name

相同运行worker和beat结果和第三种方法相同。越多详细的内容请参见:

3.2 调用职责

平素打开python交互命令行

推行上边代码:

澳门葡京备用网址 12

能够celery的窗口看到义务的执行新闻

澳门葡京备用网址 13

职责履市场价格况监察和控制和取得结果:

澳门葡京备用网址 14

3.1     编写职分

创建task.py文件

评释:那里早先Celery实例时就加载了计划,使用的redis作为消息队列和存款和储蓄职分结果。

 澳门葡京备用网址 15

 

运行celery:

$ celery -A task worker --loglevel=info

看样子下边包车型地铁打字与印刷,表明celery成功运维。

 澳门葡京备用网址 16

3.2     调用职务

 直接打开python交互命令行

 执行下边代码:

澳门葡京备用网址 17

 

能够celery的窗口看看任务的推行消息

 澳门葡京备用网址 18

 

职责执市场价格况监察和控制和收获结果:

 澳门葡京备用网址 19

 

 

职务绑定

  Celery可透过义务绑定到实例获取到职分的上下文,这样大家得以在职分运营时候取获得任务的动静,记录相关日志等。

修改职责中的period_task.py,如下:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from project import app
from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)
@app.task(bind=True)  # 绑定任务
def add(self,x,y):
    logger.info(self.request.__dict__)  #打印日志
    try:
        a=[]
        a[10]==1
    except Exception as e:
        raise self.retry(exc=e, countdown=5, max_retries=3) # 出错每5秒尝试一次,总共尝试3次
    return x+y

在以上代码中,通过bind参数将任务绑定,self指职务的上下文,通过self获取职分意况,同时在任务出错开上下班时间进行使命重试,我们着眼日志:

澳门葡京备用网址 20

3.3职分调用方法总结

有二种办法:

delay和apply_async ,delay方法是apply_async简化版。

add.delay(2, 2)
add.apply_async((2, 2))
add.apply_async((2, 2), queue='lopri')

delay方法是apply_async简化版本。

apply_async方法是足以带相当多的安插参数,包含钦命队列等

Queue 内定队列名称,能够把差异职分分配到不一致的行列 3.4     职分景况

各样任务有二种情景:PENDING -> STA大切诺基TED -> SUCCESS

职责查询状态:res.state

来询问职务的气象

澳门葡京备用网址 21

3.2     调用职分

 直接打开python交互命令行

 执行下边代码:

澳门葡京备用网址 22

 

能够celery的窗口看到职责的施行音信

 澳门葡京备用网址 23

 

职分履市场价格况监察和控制和收获结果:

 澳门葡京备用网址 24

 

 

3.3     任务调用方法总括

有二种形式:

delay和apply_async ,delay方法是apply_async简化版。

add.delay(2, 2)
add.apply_async((2, 2))
add.apply_async((2, 2), queue='lopri')

 

delay方法是apply_async简化版本。

apply_async方法是能够带相当多的布置参数,包罗钦点队列等

  • Queue 钦命队列名称,能够把不相同职务分配到区别的种类

 

嵌入钩子函数

  Celery在推行职务时候,提供了钩子方法用于在职务履行到位时候举行相应的操作,在Task源码中提供了累累情况钩子函数如:on_success(成功后举行)、on_failure(失利时候实施)、on_retry(职务重试时候实施)、after_return(任务回到时候实施),在展开应用是大家只要求重写这几个点子,达成相应的操作即可。

在偏下示例中,我们继续修改period_task.py,分别定义多少个任务来演示任务败北、重试、职责成功后执行的操作:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from project import app
from celery.utils.log import get_task_logger
from celery import Task

logger = get_task_logger(__name__)

class demotask(Task):

    def on_success(self, retval, task_id, args, kwargs):   # 任务成功执行
        logger.info('task id:{} , arg:{} , successful !'.format(task_id,args))



    def on_failure(self, exc, task_id, args, kwargs, einfo):  #任务失败执行
        logger.info('task id:{} , arg:{} , failed ! erros : {}' .format(task_id,args,exc))


    def on_retry(self, exc, task_id, args, kwargs, einfo):    #任务重试执行
        logger.info('task id:{} , arg:{} , retry !  einfo: {}'.format(task_id, args, exc))

@app.task(base=demotask,bind=True)
def add(self,x,y):
    try:
        a=[]
        a[10]==1
    except Exception as e:
        raise self.retry(exc=e, countdown=5, max_retries=1) # 出错每5秒尝试一次,总共尝试1次
    return x+y

@app.task(base=demotask)
def sayhi(name):
    a=[]
    a[10]==1
    return 'hi {}'.format(name)

@app.task(base=demotask)
def sum(a,b):
    return 'a+b={} '.format(a+b)

那时的安排文件config.py:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd

from project import app
from celery.schedules import crontab

BROKER_URL = 'redis://10.1.210.69:6379/0' # Broker配置,使用Redis作为消息中间件

CELERY_RESULT_BACKEND = 'redis://10.1.210.69:6379/0' # BACKEND配置,这里使用redis

CELERY_RESULT_SERIALIZER = 'json' # 结果序列化方案

CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间

CELERY_TIMEZONE='Asia/Shanghai'   # 时区配置

CELERY_IMPORTS = (     # 指定导入的任务模块,可以指定多个
    'project.tasks',
    'project.period_task',
)

app.conf.beat_schedule = {
'add': {          # 每10秒执行
        'task': 'project.period_task.add',  #任务路径
        'schedule': 10.0,
        'args': (10,12),
    },
'sayhi': {          # 每10秒执行
        'task': 'project.period_task.sayhi',  #任务路径
        'schedule': 10.0,
        'args': ('wd',),
    },
'sum': {          # 每10秒执行
        'task': 'project.period_task.sum',  #任务路径
        'schedule': 10.0,
        'args': (1,3),
    },
}

然后重启worker和beat,查看日志:

澳门葡京备用网址 25

 

4与Django集成

下面简单介绍了celery异步任务的焦点方法,结合我们实在的应用,大家要求与Django一起使用,上面介绍怎么着与Django结合。

3.3     职务调用方法计算

有三种形式:

delay和apply_async ,delay方法是apply_async简化版。

add.delay(2, 2)
add.apply_async((2, 2))
add.apply_async((2, 2), queue='lopri')

 

delay方法是apply_async简化版本。

apply_async方法是能够带十三分多的陈设参数,包涵内定队列等

  • Queue 钦定队列名称,可以把分歧任务分配到不一样的行列

 

3.4     任务景况

各类职分有三种境况:

PENDING -> STARTED -> SUCCESS

 

职务查询状态:

res.state

 

来查询职务的事态

 澳门葡京备用网址 26

 

任务编排

  在许多景况下,八个职务急需由八个子职分还是八个任务必要过多步骤才能成就,Celery同样也能兑现如此的职分,完毕那类型的职分通过以下模块形成:

  • group: 并行调度职分

  • chain: 链式职务调度

  • chord:
    类似group,但分header和body3个部分,header能够是一个group职务,执行到位后调用body的职务

  • map: 映射调度,通过输入多少个入参来数十一遍调度同三个职责

  • starmap: 类似map,入参类似*args

  • chunks: 将任务遵照一定数额举行分组

 

修改tasks.py:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:wd
from project import app

@app.task
def add(x,y):
    return x+y


@app.task
def mul(x,y):
    return x*y


@app.task
def sum(data_list):
    res=0
    for i in data_list:
        res+=i
    return res

 

group: 组职分,组内每个职责并行执行

和project同级目录新建consumer.py如下:

from celery import group
from project.tasks import add,mul,sum
res = group(add.s(1,2),add.s(1,2))()  # 任务 [1+2,1+2] 
while True:
    if res.ready():
        print('res:{}'.format(res.get()))
        break

结果:

澳门葡京备用网址 27

 

chain:链式任务

链式职务中,暗许上一个职分的回到结果作为参数字传送递给子职责

from celery import chain
from project.tasks import add,mul,sum
res = chain(add.s(1,2),add.s(3),mul.s(3))()  # 任务((1+2)+3)*3
while True:
    if res.ready():
        print('res:{}'.format(res.get()))
        break
#结果
#res:18

还足以选取|表示链式任务,下边职务也足以表示为:

res = (add.s(1,2) | add.s(3) | (mul.s(3)))()
res.get()

 

chord:任务分割,分为header和body两有的,hearder义务执行完在实施body,当中hearder重返结果作为参数传递给body

from celery import chord
from project.tasks import add,mul,sum
res = chord(header=[add.s(1,2),mul.s(3,4)],body=sum.s())()  # 任务(1+2)+(3*4)
while True:
    if res.ready():
        print('res:{}'.format(res.get()))
        break

#结果:
#res:15

 

chunks:义务分组,遵照任务的个数分组

from project.tasks import add,mul,sum
res = add.chunks(zip(range(5),range(5)),4)()  # 4 代表每组的任务的个数
while True:
    if res.ready():
        print('res:{}'.format(res.get()))
        break

结果:

澳门葡京备用网址 28

 

4.1与Django集成方法

与Django集成有二种格局:

  1. Django 1.8 以上版本:与Celery 4.0本子集成
  2. Django 1.8 以下版本:与Celery3.1版本集成,使用django-celery库

前几日大家介绍celery4.0 和django 1.8之上版本集成方法。

3.4     任务情况

各样职责有三种状态:

PENDING -> STARTED -> SUCCESS

 

职责查询状态:

res.state

 

来询问任务的图景

 澳门葡京备用网址 29

 

4      与Django集成

下面简单介绍了celery异步职务的主导形式,结合大家实际上的采纳,我们需要与Django一起使用,上边介绍怎么着与Django结合。

delay &apply_async

  对于delay和apply_async都足以用来举行职分的调度,本质上是delay对apply_async进行了再一遍封装(或许能够说是急迅格局),两者都回去AsyncResult对象,以下是三个办法源码。

澳门葡京备用网址 30澳门葡京备用网址 31

    def delay(self, *args, **kwargs):
        """Star argument version of :meth:`apply_async`.

        Does not support the extra options enabled by :meth:`apply_async`.

        Arguments:
            *args (Any): Positional arguments passed on to the task.
            **kwargs (Any): Keyword arguments passed on to the task.
        Returns:
            celery.result.AsyncResult: Future promise.
        """
        return self.apply_async(args, kwargs)

delay源码

澳门葡京备用网址 32澳门葡京备用网址 33

    def apply_async(self, args=None, kwargs=None, task_id=None, producer=None,
                    link=None, link_error=None, shadow=None, **options):
        """Apply tasks asynchronously by sending a message.

        Arguments:
            args (Tuple): The positional arguments to pass on to the task.

            kwargs (Dict): The keyword arguments to pass on to the task.

            countdown (float): Number of seconds into the future that the
                task should execute.  Defaults to immediate execution.

            eta (~datetime.datetime): Absolute time and date of when the task
                should be executed.  May not be specified if `countdown`
                is also supplied.

            expires (float, ~datetime.datetime): Datetime or
                seconds in the future for the task should expire.
                The task won't be executed after the expiration time.

            shadow (str): Override task name used in logs/monitoring.
                Default is retrieved from :meth:`shadow_name`.

            connection (kombu.Connection): Re-use existing broker connection
                instead of acquiring one from the connection pool.

            retry (bool): If enabled sending of the task message will be
                retried in the event of connection loss or failure.
                Default is taken from the :setting:`task_publish_retry`
                setting.  Note that you need to handle the
                producer/connection manually for this to work.

            retry_policy (Mapping): Override the retry policy used.
                See the :setting:`task_publish_retry_policy` setting.

            queue (str, kombu.Queue): The queue to route the task to.
                This must be a key present in :setting:`task_queues`, or
                :setting:`task_create_missing_queues` must be
                enabled.  See :ref:`guide-routing` for more
                information.

            exchange (str, kombu.Exchange): Named custom exchange to send the
                task to.  Usually not used in combination with the ``queue``
                argument.

            routing_key (str): Custom routing key used to route the task to a
                worker server.  If in combination with a ``queue`` argument
                only used to specify custom routing keys to topic exchanges.

            priority (int): The task priority, a number between 0 and 9.
                Defaults to the :attr:`priority` attribute.

            serializer (str): Serialization method to use.
                Can be `pickle`, `json`, `yaml`, `msgpack` or any custom
                serialization method that's been registered
                with :mod:`kombu.serialization.registry`.
                Defaults to the :attr:`serializer` attribute.

            compression (str): Optional compression method
                to use.  Can be one of ``zlib``, ``bzip2``,
                or any custom compression methods registered with
                :func:`kombu.compression.register`.
                Defaults to the :setting:`task_compression` setting.

            link (Signature): A single, or a list of tasks signatures
                to apply if the task returns successfully.

            link_error (Signature): A single, or a list of task signatures
                to apply if an error occurs while executing the task.

            producer (kombu.Producer): custom producer to use when publishing
                the task.

            add_to_parent (bool): If set to True (default) and the task
                is applied while executing another task, then the result
                will be appended to the parent tasks ``request.children``
                attribute.  Trailing can also be disabled by default using the
                :attr:`trail` attribute

            publisher (kombu.Producer): Deprecated alias to ``producer``.

            headers (Dict): Message headers to be included in the message.

        Returns:
            celery.result.AsyncResult: Promise of future evaluation.

        Raises:
            TypeError: If not enough arguments are passed, or too many
                arguments are passed.  Note that signature checks may
                be disabled by specifying ``@task(typing=False)``.
            kombu.exceptions.OperationalError: If a connection to the
               transport cannot be made, or if the connection is lost.

        Note:
            Also supports all keyword arguments supported by
            :meth:`kombu.Producer.publish`.
        """
        if self.typing:
            try:
                check_arguments = self.__header__
            except AttributeError:  # pragma: no cover
                pass
            else:
                check_arguments(*(args or ()), **(kwargs or {}))

        app = self._get_app()
        if app.conf.task_always_eager:
            with denied_join_result():
                return self.apply(args, kwargs, task_id=task_id or uuid(),
                                  link=link, link_error=link_error, **options)

        if self.__v2_compat__:
            shadow = shadow or self.shadow_name(self(), args, kwargs, options)
        else:
            shadow = shadow or self.shadow_name(args, kwargs, options)

        preopts = self._get_exec_options()
        options = dict(preopts, **options) if options else preopts

        options.setdefault('ignore_result', self.ignore_result)

        return app.send_task(
            self.name, args, kwargs, task_id=task_id, producer=producer,
            link=link, link_error=link_error, result_cls=self.AsyncResult,
            shadow=shadow, task_type=self,
            **options
        )

apply_async源码

对此其应用,apply_async协助常用参数:

  • eta:钦定职分执行时间,类型为datetime时间项目;
  • countdown:倒计时,单位秒,浮点类型;
  • expires:职分过期时间,假若职分在超过过期时间还未实行则回收职分,浮点类型获取datetime类型;
  • retry:职务执行破产时候是否尝试,布尔类型。;
  • serializer:体系化方案,补助pickle、json、yaml、msgpack;
  • priority:任务优先级,有0~9优先级可设置,int类型;
  • retry_policy:职责重试机制,个中包括多少个重试参数,类型是dict如下:

澳门葡京备用网址 34澳门葡京备用网址 35

max_retries:最大重试次数

interval_start:重试等待时间

interval_step:每次重试叠加时长,假设第一重试等待1s,第二次等待1+n秒

interval_max:最大等待时间

####示例
 add.apply_async((1, 3), retry=True, retry_policy={
        'max_retries': 1,
        'interval_start': 0,
        'interval_step': 0.8,
        'interval_max': 5,
    })

View Code

越多参数参考:

 

  

4.2 创造项目文件

创办三个项目:名字称为proj

- proj/
 - proj/__init__.py
 - proj/settings.py
 - proj/urls.py
 - proj/wsgi.py
- manage.py

创制四个新的公文: proj/proj/mycelery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

在proj/proj/__init__.py:添加

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .mycelery import app as celery_app

__all__ = ['celery_app']

4      与Django集成

上面不难介绍了celery异步任务的中坚格局,结合大家实际上的施用,大家须要与Django一起使用,上边介绍怎么样与Django结合。

4.1     与Django集成方法

与Django集成有三种办法:

  • Django 1.8 以上版本:与Celery 4.0版本集成
  • Django 1.8 以下版本:与Celery3.1版本集成,使用django-celery库

 

今天我们介绍celery4.0 和django 1.8之上版本集成方法。

 ⑤ 、管理与监督

  Celery管理和督察功用是因此flower组件达成的,flower组件不仅仅提供监督作用,还提供HTTP
API可落成对woker和task的管住。

4.3 配置Celery

咱俩在mycelery.py文件中申明celery的陈设文件在settings.py中,并且是以CELE奥迪Q5Y初始。

app.config_from_object('django.conf:settings', namespace='CELERY')

在settings.py文件中添加celery配置:

澳门葡京备用网址 36

作者们的安排是行使redis作为新闻队列,信息的代理和结果都以用redis,任务的系列化使用json格式。

第②:redis://127.0.0.1:6379/0那一个表明使用的redis的0号队列,尽管有多个celery任务都选择同多少个队列,则会促成任务混乱。最佳是celery实例单独采纳二个连串。

4.1     与Django集成方法

与Django集成有三种方法:

  • Django 1.8 以上版本:与Celery 4.0本子集成
  • Django 1.8 以下版本:与Celery3.1版本集成,使用django-celery库

 

明天大家介绍celery4.0 和django 1.8以上版本集成方法。

4.2     创造项目文件

创办一个项目:名字称为proj

- proj/
  - proj/__init__.py
  - proj/settings.py
  - proj/urls.py
  - proj/wsgi.py
- manage.py

 

始建四个新的公文:proj/proj/mycelery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

 

在proj/proj/__init__.py:添加

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .mycelery import app as celery_app

__all__ = ['celery_app']

 

设置使用

pip3 install flower

启动

 flower -A project --port=5555   
# -A :项目目录
#--port 指定端口

访问http:ip:5555

澳门葡京备用网址 37

api使用,例如获取woker音信:

curl http://127.0.0.1:5555/api/workers

结果:

澳门葡京备用网址 38

更多api参考:

 

4.4创建APP

创建Django的App,名称为celery_task,在app目录下创办tasks.py文件。

落成后目录结构为:

├── celery_task
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tasks.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── proj
│ ├── celery.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── templates

4.2     创造项目文件

制造三个类型:名字称为proj

- proj/
  - proj/__init__.py
  - proj/settings.py
  - proj/urls.py
  - proj/wsgi.py
- manage.py

 

始建一个新的文书:proj/proj/mycelery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

 

在proj/proj/__init__.py:添加

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .mycelery import app as celery_app

__all__ = ['celery_app']

 

4.3     配置Celery

大家在mycelery.py文件中证实celery的布局文件在settings.py中,并且是以CELE奥迪Q5Y初步。

   

app.config_from_object('django.conf:settings', namespace='CELERY')

 

在settings.py文件中添加celery配置:

 澳门葡京备用网址 39

 

大家的配置是运用redis作为音信队列,新闻的代办和结果都以用redis,职务的连串化使用json格式。

首要:redis://127.0.0.1:6379/0以此注脚使用的redis的0号队列,假设有几个celery职务都施用同3个队列,则会招致任务混乱。最佳是celery实例单独使用贰个行列。

4.5编写task任务

编辑任务文件

tasks.py

在tasks.py文件中添加下边代码

# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(x, y):
 return x + y

@shared_task
def mul(x, y):
 return x * y

@shared_task
def xsum(numbers):
 return sum(numbers)

启动celery:celery -A proj.mycelery worker -l info

说明:proj 为模块名称,mycelery 为celery 的实例所在的文本。

开首成功打印:

澳门葡京备用网址 40

4.3     配置Celery

我们在mycelery.py文件中验证celery的陈设文件在settings.py中,并且是以CELECR-VY初阶。

   

app.config_from_object('django.conf:settings', namespace='CELERY')

 

在settings.py文件中添加celery配置:

 澳门葡京备用网址 41

 

大家的布置是选取redis作为新闻队列,音信的代理和结果都以用redis,职责的连串化使用json格式。

主要:redis://127.0.0.1:6379/0这一个评释使用的redis的0号队列,若是有五个celery职责都利用同二个种类,则会导致职务混乱。最佳是celery实例单独使用2个行列。

4.4     创建APP

创建Django的App,名称为celery_task,在app目录下创办tasks.py文件。

成就后目录结构为:

├── celery_task
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
├── proj
│   ├── celery.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── templates

 

4.6在views中调用义务

在views中编辑接口,完成多个效益:

  1. 接触职分,然后回来任务的结果和职分ID
  2. 依照任务ID查询职务状态

代码如下:

澳门葡京备用网址 42

启动django。

新开3个会话运转celery;运转命令为:celery –A proj.mycelery worker –l
info

访问 ,能够见见再次回到的结果。

澳门葡京备用网址 43

在celery运行的页面,可以看出上边输出:

澳门葡京备用网址 44

4.4     创建APP

创建Django的App,名称为celery_task,在app目录下创办tasks.py文件。

完结后目录结构为:

├── celery_task
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── manage.py
├── proj
│   ├── celery.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── templates

 

4.5     编写task任务

编纂职务文件

tasks.py

在tasks.py文件中添加上边代码

# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(x, y):
    return x + y

@shared_task
def mul(x, y):
    return x * y

@shared_task
def xsum(numbers):
    return sum(numbers)

 

启动celery:

celery -A proj.mycelery worker -l info

 

证明:proj为模块名称,mycelery为celery的实例所在的文本。

运营成功打字与印刷:

 澳门葡京备用网址 45

 

4.7在views中查询职分情形

部分时候任务执行时间较长,要求查询义务是还是不是举办到位,能够根据职务的id来询问任务情状,依据气象实行下一步操作。

能够见见任务的图景为:SUCCESS

澳门葡京备用网址 46

4.5     编写task任务

编写职务文件

tasks.py

在tasks.py文件中添加上面代码

# Create your tasks here
from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(x, y):
    return x + y

@shared_task
def mul(x, y):
    return x * y

@shared_task
def xsum(numbers):
    return sum(numbers)

 

启动celery:

celery -A proj.mycelery worker -l info

 

表明:proj为模块名称,mycelery为celery的实例所在的文本。

启航成功打字与印刷:

 澳门葡京备用网址 47

 

4.6     在views中调用任务

澳门葡京备用网址,在views中编辑接口,落成三个成效:

  • 接触职责,然后返回职分的结果和任务ID
  • 依据任务ID查询任务情状

代码如下:

 澳门葡京备用网址 48

 

启动django。

新开三个对话启动celery;运行命令为:

celery –A proj.mycelery worker –l info

 

访问,能够看出重返的结果。

 澳门葡京备用网址 49

 

在celery运转的页面,能够看看下边输出:

 澳门葡京备用网址 50

 

5Celery定时任务

Celery作为异步职分队列,我们得以依照大家设置的日子,定时的施行一些职分,例如每一天数据库备份,日志转存等。

Celery的定时职分布置十分不难:

定时职务的安顿依然在setting.py文件中。

证实:如若觉得celery 的数量配置文件和Django 的都在setting.py
一个文件中不便宜,能够分拆出来,只需求在mycelery.py
的文件中指明即可。

app.config_from_object('django.conf:yoursettingsfile', namespace='CELERY')

4.6     在views中调用职责

在views中编辑接口,实现三个效用:

  • 接触职务,然后回来职分的结果和职务ID
  • 基于任务ID查询职务意况

代码如下:

 澳门葡京备用网址 51

 

启动django。

新开二个会话运转celery;运行命令为:

celery –A proj.mycelery worker –l info

 

访问

 澳门葡京备用网址 52

 

在celery运营的页面,能够看出下边输出:

 澳门葡京备用网址 53

 

4.7     在views中查询职务处境

有些时候任务执行时间较长,须求查询职分是还是不是执行到位,可以依据职务的id来询问任务状态,依照气象进行下一步操作。

能够见见任务的情况为:SUCCESS

 澳门葡京备用网址 54

 

5.1职务间隔运营

#每30秒调用task.add
from datetime import timedelta

CELERY_BEAT_SCHEDULE = {
 'add-every-30-seconds': {
  'task': 'tasks.add',
  'schedule': timedelta(seconds=30),
  'args': (16, 16)
 },
}

4.7     在views中询问任务状态

一部分时候任务履行时间较长,须要查询职务是还是不是举行到位,能够依照任务的id来查询任务状态,依照事态进行下一步操作。

能够看到职责的动静为:SUCCESS

 澳门葡京备用网址 55

 

5      Celery定时职责

Celery作为异步职分队列,大家得以依照大家设置的时光,定时的履行一些任务,例如天天数据库备份,日志转存等。

Celery的定时任务安插分外不难:

定时义务的配备照旧在setting.py文件中。

表达:要是觉得celery的多寡配置文件和Django的都在setting.py一个文件中不便于,能够分拆出来,只须求在mycelery.py的文件中指明即可。

app.config_from_object('django.conf:yoursettingsfile', namespace='CELERY')

 

 

5.2定时执行

定时每一天深夜7:贰十五分运作。

只顾:设置职务时间时注意时间格式,UTC时间可能当地时间。

#crontab任务
#每天7:30调用task.add
from celery.schedules import crontab

CELERY_BEAT_SCHEDULE = {
 # Executes every Monday morning at 7:30 A.M
 'add-every-monday-morning': {
  'task': 'tasks.add',
  'schedule': crontab(hour=7, minute=30),
  'args': (16, 16),
 },
}

5      Celery定时职务

Celery作为异步任务队列,大家能够依照大家设置的小时,定时的推行一些职分,例如每日数据库备份,日志转存等。

Celery的定时职责布署卓殊简单:

定时职务的布局照旧在setting.py文件中。

证实:假设觉得celery的多少配置文件和Django的都在setting.py三个文件中不便民,能够分拆出来,只要求在mycelery.py的公文中指明即可。

app.config_from_object('django.conf:yoursettingsfile', namespace='CELERY')

 

 

5.1     职务间隔运营

#每30秒调用task.add
from datetime import timedelta

CELERY_BEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (16, 16)
    },
}

 

5.3定时职务运维

陈设了定时任务,除了worker进度外,还亟需运行一个beat进度。

Beat进程的功能就也正是一个定时职分,依据布置来执行相应的天职。

5.3.1  启动beat进程

命令如下:celery -A proj.mycelery beat -l info

澳门葡京备用网址 56

5.3.2  启动worker进程

Worker进程运维和近来运维命令一样。celery –A proj.mycelery worker –l info

澳门葡京备用网址 57

5.1     任务间隔运营

#每30秒调用task.add
from datetime import timedelta

CELERY_BEAT_SCHEDULE = {
    'add-every-30-seconds': {
        'task': 'tasks.add',
        'schedule': timedelta(seconds=30),
        'args': (16, 16)
    },
}

 

5.2     定时进行

定时每天晚上7:三十三分运营。

留神:设置任务时间时只顾时间格式,UTC时间依然当地时间。

#crontab任务
#每天7:30调用task.add
from celery.schedules import crontab

CELERY_BEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30),
        'args': (16, 16),
    },
}

 

6 Celery深入

Celery职责补助多元的运转形式:

  1. 扶助动态钦点并发数 –autoscale=10,3 (always keep 3 processes, but
    grow to 10 if necessary).
  2. 支撑链式义务
  3. 支持Group任务
  4. 支撑义务分化优先级
  5. 支持钦点职分队列
  6. 援救选取eventlet方式运作worker

比如:钦点并发数为一千

celery -A proj.mycelery worker -c 1000

这几个足以依据使用的递进机关掌握和读书。

以上便是本文的全部内容,希望对大家的就学抱有扶助,也愿意我们多多支持脚本之家。

5.2     定时实施

定时天天早晨7:贰21分运作。

留神:设置任务时间时留意时间格式,UTC时间依旧地面时间。

#crontab任务
#每天7:30调用task.add
from celery.schedules import crontab

CELERY_BEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'add-every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30),
        'args': (16, 16),
    },
}

 

5.3     定时职务运转

配置了定时职分,除了worker进度外,还索要运行三个beat进度。

Beat进度的意义就一定于叁个定时职务,依照安插来执行相应的职责。

您可能感兴趣的稿子:

  • Django中使用celery实现异步职务的演示代码
  • 异步任务队列Celery在Django中的行使办法

5.3     定时任务运维

布置了定时职责,除了worker进度外,还需求运营三个beat进度。

Beat进度的法力就也便是二个定时任务,依照配置来实施相应的天职。

5.3.1  启动beat进程

命令如下:

celery -A proj.mycelery beat -l info

 澳门葡京备用网址 58

 

5.3.1  启动beat进程

一声令下如下:

celery -A proj.mycelery beat -l info

 澳门葡京备用网址 59

 

5.3.2  启动worker进程

Worker进度启动和前面运行命令一样。

 

celery –A proj.mycelery worker –l info

澳门葡京备用网址 60

 

5.3.2  启动worker进程

Worker进度运维和前边运转命令一样。

 

celery –A proj.mycelery worker –l info

 

6      Celery深入

Celery职分援助多元的运作情势:

  • 帮助动态钦点并发数 –autoscale=10,3 (always keep 3 processes, but
    grow to 10 if necessary).
  • 支撑链式职责
  • 支持Group任务
  • 帮衬职分差异优先级
  • 帮忙钦赐职分队列
  • 补助使用eventlet方式运作worker

例如:钦命并发数为一千

celery -A proj.mycelery worker -c 1000

 

这么些足以依据使用的中肯机关驾驭和读书。

 

 

6      Celery深入

Celery义务支持多元的运维形式:

  • 援救动态钦命并发数 –autoscale=10,3 (always keep 3 processes, but
    grow to 10 if necessary).
  • 支撑链式职务
  • 支持Group任务
  • 支撑任务不一样优先级
  • 辅助钦定职务队列
  • 帮助使用eventlet情势运作worker

例如:钦赐并发数为一千

celery -A proj.mycelery worker -c 1000

 

那些足以依据使用的尖锐机关理解和读书。

 

 

7      参考资料

Celery官网:

Celery与Django:

celery定时职责:

7      参考资料

Celery官网:

Celery与Django:

celery定时职务:

1
Celery简介
Celery是异步职责队列,能够单独于主进度运维,在主进度退出后,也不影响队列中的任务…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website