02.任务队列和中间人

上一篇介绍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一样,当参数传递到Celery
app = Celery("pName",broker="redis://", backend="redis://")
#第二种,使用配置参数result_backend
app.conf.result_backend = "redis://"
'''
URL格式同broker格式一样
'''

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

猜你喜欢

转载自blog.csdn.net/a540366413/article/details/73289151
今日推荐