02.任务队列和中间人

来源:互联网 发布:电子表格数据样板 编辑:程序博客网 时间:2024/06/16 22:20

上一篇介绍Celery是处理任务队列的分布式系统,那么什么是任务队列?

任务队列

任务队列是一种分配工作到线程或者计算机的一种机制。
任务队列的输入是叫任务的工作单元,worker进程会不断监视任务队列进行新的工作。
Celery使用消息通信,通常在client和worker之间有个中间人(broker),新加入一个任务客户端会发送一个消息到任务队列,然后中间人会把消息传递给worker。
Celery系统由多个worker和broker组成,高可用,横向扩展性强。
可以实现语言间的相互调用,通过暴露HTTP接口请求一个任务。
Celery可以运行在单个、多个机器,甚至是数据中心。

使用Redis作为broker

Celery支持两种稳定的broker,分别是RabbitMQ和Redis。本系列文章使用Redis作为broker和backend,backend后续介绍。
可以专门安装带redis依赖的celery pip install celery[redis]
如果使用过pip install celery就不需要安装了。

#配置使用redis的broker很容易from celery import Celery#第一种方法,在创建Celery实例时作为参数传递app = Celery("projectName",broker="redis://localhost:6379/0")#第二种通过配置broker_url配置项设置app.conf.broker_url = "redis://localhost:6379/0"'''URL格式为:redis://:password@IPorHost:port/dbNumber如果对应部分没填写默认redis://localhost:6379/0比如“redis://”、“redis://localhost”...'''

Celery执行异步任务的时自身并不存储结果和状态的,想要获得返回结果和状态需要配置结果后端(result backend)用来存储结果和状态。

from celery import Celery#第一种和broker一样,当参数传递到Celeryapp = Celery("pName",broker="redis://", backend="redis://")#第二种,使用配置参数result_backendapp.conf.result_backend = "redis://"'''URL格式同broker格式一样'''

参考文档
http://docs.celeryproject.org/en/latest/getting-started/brokers/redis.html