celery-1

# celery

1.概念

基本概念:Broker, Backend

什么是broker?

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)组成。

消息中间件
Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ

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

任务结果存储
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

猜你喜欢

转载自www.cnblogs.com/wodeboke-y/p/11600926.html