一、什么是celery
Celery是一个python开发的异步分布式任务调度模块。
Celery本身并不提供消息服务,使用第三方服务,也就是borker来传递任务,目前支持rebbimq,redis, 数据库等。
`这里我们使用redis 连接url的格式为:
redis://:password@hostname:port/db_number
例如:BROKER_URL = 'redis://localhost:6379/0'
pip install celery
pip install redis
在服务器上安装redis服务器,并启动redis
第一个简单的例子:
[root@localhost celery]# cat ling.py
#/usr/bin/env python
#-*- coding:utf-8 -*-
from celery import Celery
broker="redis://192.168.48.131:6379/5"
backend="redis://192.168.48.131:6379/6"
app = Celery("ling", broker=broker, backend=backend)
@app.task
def add(x, y):
return x+y
#celery -A ling worker -l info
注意:celery -A 启动一个app, 后面跟app的名字,app名字需要和上面的文件名字一致
form ling import add
re = add.delay(10, 20)
print(re.result) #获取结果
print(re.ready()) #是否处理
print(re.get(timeout=1)) #获取结果
print(re.status) #是否处理
print(re.id)
Print(re.task_id)
四、Celery模块调用
既然celery是一个分布式的任务调度模块,那么celery是如何和分布式挂钩呢,celery可以支持多台不通的计算机执行不同的任务或者相同的任务。
如果要说celery的分布式应用的话,我觉得就要提到celery的消息路由机制,就要提一下AMQP协议。具体的可以查看AMQP的文档。简单地说就是可以有多个消息队列(Message Queue),不同的消息可以指定发送给不同的Message Queue,而这是通过Exchange来实现的。发送消息到Message Queue中时,可以指定routiing_key,Exchange通过routing_key来把消息路由(routes)到不同的Message Queue中去