3.4     职责状态

每一种职分有三种境况:

PENDING -> STARTED -> SUCCESS

 

职务查询状态:

res.state

澳门凯旋门注册网址, 

来查询职分的事态

 凯旋门074网址 1

 

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 钦命队列名称,能够把差别任务分配到差别的行列

 

4.6     在views中调用任务

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

  • 接触职分,然后回到职分的结果和职分ID
  • 凯旋门074网址,依赖职分ID查询职务意况

代码如下:

 凯旋门074网址 2

 

启动django。

新开三个会话运转celery;运维命令为:

celery –A proj.mycelery worker –l info

 

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

 凯旋门074网址 3

 

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

 凯旋门074网址 4

 

5.3     定时职责运转

配置了定时职责,除了worker进程外,还索要运转二个beat进度。

澳门凯旋门游戏网址,Beat进度的功效就也就是二个定期义务,根据安顿来推行相应的职分。

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']

 

2      Celery开辟条件绸缪

1  Celery简介

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

职务施行非常退出,重新开动后,会继续实行队列中的其余职分,同期能够缓存截至时期接收的专门的学业职分,那几个职能信赖于消息队列(MQ、Redis)。

 

4.3     配置Celery

大家在mycelery.py文件中验证celery的布置文件在settings.py中,何况是以CELE索罗德Y起先。

   

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

 

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

 凯旋门074网址 5

 

咱俩的布局是采用redis作为消息队列,音讯的代办和结果都以用redis,任务的种类化使用json格式。

器重:redis://127.0.0.1:6379/0那个声明使用的redis的0号队列,假若有四个celery职责都选择同一个队列,则会导致职务混乱。最佳是celery实例单独选择一个连串。

3.2     调用职务

 直接张开python交互命令行

 试行下边代码:

凯旋门074网址 6

 

能够celery的窗口看看职责的进行消息

 凯旋门074网址 7

 

职务履涨势况监察和控制和收获结果:

 凯旋门074网址 8

 

 

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.7     在views中查询任务情形

一对时候职分实行时间较长,须求查询职务是或不是实施到位,能够依靠职务的id来询问任务状态,依据气象进行下一步操作。

能够看看职责的状态为:SUCCESS

 凯旋门074网址 9

 

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)
    },
}

 

1.1  Celery原理

 凯旋门074网址 10

 

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

  • 音信中间件:Celery自身不提供音信服务,但是足以平价的和第三方提供的消息中间件集成。富含,RabbitMQRedis, MongoDB (experimental),
    亚马逊(Amazon) SQS (experimental),CouchDB (experimental), SQLAlchemy
    (experimental),Django ORM (experimental),
    IronMQ。推荐应用:RabbitMQ、Redis作为新闻队列。
  • Celery是异步任务队列。职务实行单元:Worker是Celery提供的职分施行的单元,worker并发的运作在分布式的系统节点中。
  • 职务结果存款和储蓄:Task result
    store用来存储Worker推行的职务的结果,Celery帮助以不一致方法存款和储蓄职务的结果,包蕴AMQP,
    Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra,
    IronCache

1.2     Celery适用场景

  • 异步职责管理:比方给登记用户发送短新闻大概确认邮件任务。
  • 特大型职务:实行时间较长的职务,举个例子录像和图纸管理,增添水印和转码等,需求实施任务时间长。
  • 按期实践的职分:补助任务的定时实践和设定时期推行。比如质量压测定时试行。

 

3      Celery单独推行任务

4.1     与Django集成方法

与Django集成有三种艺术:

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

 

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

5.3.2  启动worker进程

Celery是异步任务队列。Celery是异步任务队列。Worker进程运维和眼下运营命令同样。

 

celery –A proj.mycelery worker –l info

凯旋门074网址 11

 

5.3.1  启动beat进程

指令如下:

celery -A proj.mycelery beat -l info

 凯旋门074网址 12

 

3.1     编写义务

创建task.py文件

表明:这里初步Celery实例时就加载了配置,使用的redis作为音讯队列和仓库储存职分结果。

 凯旋门074网址 13

 

运行celery:

$ celery -A task worker --loglevel=info

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

 凯旋门074网址 14

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的实例所在的文书。

起步成功打字与印刷:

 凯旋门074网址 15

 

2.1     遭受计划

软件名称

版本号

说明

Linux

Centos 6.5(64bit)

操作系统

Python

3.5.2

 

Django

1.10

Web框架

Celery

4.0.2

异步任务队列

Redis

2.4

消息队列

 

5      Celery定期义务

Celery作为异步职务队列,大家能够听从我们设置的小时,定期的施行一些职责,举个例子每一日数据库备份,日志转存等。

Celery的定期职务布置特别轻便:

定期任务的配备依然在setting.py文件中。

证实:如若认为celery的数据配置文件和Django的都在setting.py三个文件中不低价,能够分拆出来,只必要在mycelery.py的文本中指明就能够。

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

 

 

5.2     定期实施

定时每日深夜7:30分运作。

在意:设置义务时间时注意时间格式,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),
    },
}

 

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

 

4      与Django集成

地点简要介绍了celery异步任务的为主方法,结合我们其实的应用,大家须求与Django一同使用,下边介绍如何与Django结合。

7      参考资料

Celery官网:

Celery与Django:

celery定期职务:

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

 

这几个能够依照使用的中肯机关明白和读书。

 

 

相关文章