celery-1
Posted wodeboke-y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于celery-1的主要内容,如果未能解决你的问题,请参考以下文章