celery-1

# celery

1.概念

基本概念:Broker, Backendredis

什么是broker?mongodb

broker是一个消息传输的中间件,能够理解为一个队列。每当应用程序调用celery的异步任务的时候,会向broker传递消息,然后celery的worker将会取到消息,进行对应的程序执行。
Broker的中文意思是‘经纪人’,其实就是‘消息队列’,用来发送和接受消息。
Broker有几个方案可供选择:RabbitMQ,Redis,数据库(不推荐),等等。数据库

什么是backend?架构

异步程序的一个重大问题是怎么保证结果返回对应的处理机。
backend用于存储处理机的相关信息及执行的信息。
Backend是在Celery的配置中的一个配置项 CELERY_RESULT_BACKEND ,做用是保存结果和状态,若是须要跟踪任务的状态,那么须要设置这一项,能够是Database backend,也能够是Cache backend,具体能够参考这里: CELERY_RESULT_BACKEND 。并发

对于 brokers,官方推荐是 rabbitmq 和 redis,至于 backend,就是数据库。为了简单能够都使用 redis。异步

1.1 架构

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

消息中间件
Celery自己不提供消息服务,可是能够方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ分布式

任务执行单元
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。memcached

任务结果存储
Task result store用来存储Worker执行的任务的结果,Celery支持以不一样方式存储任务的结果,包括AMQP, redis,memcached, mongodb,SQLAlchemy, Django ORM,Apache Cassandra, IronCache 等。中间件

beat
其实还有一个组件beat,worker能够视为twisted的循环,只负责从队列中取任务、执行、返回结果;
若是不主动向任务队列添加任务worker会空闲;

添加任务有两种方式:
delay是一次性添加任务也就是async task;
beat负责周期性的向任务队列中添加任务;

架构图:

2.安装

pip install celery

本站公众号
   欢迎关注本站公众号,获取更多信息