python/mq Celery
Posted ikct2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python/mq Celery相关的知识,希望对你有一定的参考价值。
Celery
Celery是管理分布式任务队列的工具,其本身并不是任务队列。
Celery常见概念有brokers、backend、workers、tasks。
brokers:中间人,是Celery存放/拿取产品的地方,即任务队列,常见有rabbitmq/redis/zookeeper。
backend:又称result stores,存储运行结果,常见有redis/memcached。
workers:Celery的工作者,从队列中取出任务并执行,将结果发送到backend。
tasks:任务。
简例
# tasks.py
from celery import Celery
app = Celery(‘tasks‘,
backend=‘redis://[host]:6379/0‘,
broker=‘amqp://[user]:[password]@[host]:5672‘)
@app.task
def add(x, y):
return x + y
# 命令行启动worker,此时broker中还没有任务
celery -A tasks worker --loglevel=info
# 向broker发送任务并获取结果
from tasks import add
result = add.delay(2, 3)
while not result.ready():
time.sleep(1)
print(result.get())
>>>: 5
例子中,app就是celery对象,它定义了对象的名称(用于命令行启动),存储者,任务队列。
add方法用app.task包装后,表明此函数为任务执行者。
执行add.delay()方法,参数传入到执行者,并会返回结果,当result.ready()为真时,表明结果已返回至存储者,可通过result.get()获取该结果。
与pika的区别
pika是用来连接rabbitmq的python模块,rabbitmq本身只有存储功能,而没有任务分发调度功能,celery就是用来做任务分配的,当然也可以为pika写一个调度代码,不过有现成的celery,只要用就行了。
以上是关于python/mq Celery的主要内容,如果未能解决你的问题,请参考以下文章