celery

Celery介绍
html

 

Celery是一个功能完备即插即用的异步任务队列系统。它适用于异步处理问题,当发送邮件、或者文件上传, 图像处理等等一些比较耗时的操做,咱们可将其异步执行,这样用户不须要等待好久,提升用户体验。python

文档:http://docs.jinkan.org/docs/celery/getting-started/index.htmlgit

Celery的特色是:github

  • 简单,易于使用和维护,有丰富的文档。redis

  • 高效,单个celery进程每分钟能够处理数百万个任务。django

  • 灵活,celery中几乎每一个部分均可以自定义扩展。api

 

任务队列是一种跨线程、跨机器工做的一种机制.
任务队列中包含称做任务的工做单元。有专门的工做进程持续不断的监视任务队列,并从中得到新的任务并处理.
celery经过消息进行通讯,一般使用一个叫Broker(中间人)来协client(任务的发出者)和worker(任务的处理者). clients发出消息到队列中,broker将队列中的信息派发给worker来处理。

 

Celery的架构

Celery的架构由三部分组成,消息队列(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。架构

 

 

一个celery系统能够包含不少的worker和brokerapp

Celery自己不提供消息队列功能,可是能够很方便地和第三方提供的消息中间件进行集成,包括RabbitMQ,Redis,MongoDB等异步

 

安装

pip install -U celery

也可从官方直接下载安装包:https://pypi.python.org/pypi/celery/

tar xvfz celery-0.0.0.tar.gz
cd celery-0.0.0
python setup.py build
python setup.py install

 

使用

使用celery第一件要作的最为重要的事情是须要先建立一个Celery实例,咱们通常叫作celery应用,或者更简单直接叫作一个app。app应用是咱们使用celery全部功能的入口,好比建立任务,管理任务等,在使用celery的时候,app必须可以被其余的模块导入。

通常celery任务目录直接放在项目的根目录下便可,路径:

luffyapi/
├── my_celery/
    ├── config.py     # 配置文件
    ├── __init__.py   
    ├── main.py       # 主程序
    └── sms/          # 一个目录能够放置多个任务,该目录下存放当前任务执行时须要的模块或依赖
        └── tasks.py  # 任务的文件,名称必须是这个!!!

 

main.py,代码:

# 主程序
from celery import Celery
# 建立celery实例对象
app = Celery("luffy")

# 经过app对象加载配置
app.config_from_object("my_celery.config")

# 自动搜索并加载任务
# 参数必须必须是一个列表,里面的每个任务都是任务的路径名称
# app.autodiscover_tasks(["任务1","任务2",....])
app.autodiscover_tasks(["my_celery.sms","my_celery.cache"])

# 启动Celery的命令
# 强烈建议切换目录到项目的根目录下启动celery!!
# celery -A my_celerymain worker --loglevel=info

 

配置文件config.py,代码:

# 任务队列的连接地址
broker_url = 'redis://127.0.0.1:6379/15'
# 结果队列的连接地址
result_backend = 'redis://127.0.0.1:6379/14'

 

建立一个任务文件sms/tasks.py,并建立任务,代码:

# celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
from my_celery.main import app

@app.task  # name表示设置任务的名称,若是不填写,则默认使用函数名作为任务名
def send_sms():
    print("发送短信!!!")

@app.task(name="send_sms2")  # name表示设置任务的名称,若是不填写,则默认使用函数名作为任务名
def send_sms2():
    print("发送短信任务2!!!")

 

运行代码

celery -A my_celery.main worker --loglevel=info

 

django导入

在程序中调用上面的异步任务,拿django进行举例:

# 调用celery执行异步任务
from my_celery.sms.tasks import send_sms
send_sms.delay(mobile)

其余参考文档:

http://docs.celeryproject.org/en/latest/getting-started/introduction.html

https://github.com/celery/celery/tree/master/examples/django/

https://www.jianshu.com/p/1840035cb510

https://flower.readthedocs.io/en/latest/screenshots.html

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息