celery-分布式队列管理工具

1:为什么使用celery?
在开发项目中,经常有一些耗时操作(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行任务,比如发送短信、邮件、网络请求等。在这种情况下,使用celery就是一个很好的选择。

2:celery是什么?
Celery是一个由python编写的简单、灵活、可靠的用来处理大量信息的分布式系统,同时提供了操作和维护分布式系统所需要的工具,说白了就是一个用来管理分布式队列的工具。
celery支持实时的任务处理,支持任务调度

注意:celery本身不是任务队列,它只是一个管理分布式队列的工具罢了,内部封装了任务队列的各种常见操作,使用celery可以方便快速的管理任务队列。

3:celery中常见的名词:

1:Brokers
brokers 中文意思为中间人,在这里就是指任务队列本身,Celery 扮演生产者和消费者的角色,brokers 就是生产者和消费者存放/拿取产品的地方(队列)
常见的 brokers 有 rabbitmq、redis、Zookeeper 等

2: Result Stores / backend
用来存储返回的结果的地方,队列中的任务运行完成后的结果或者运行状态就保存在这里

3:Workers
Celery中执行任务的工作者,从队列中取出任务并执行

4:Tasks
被执行的任务,由用户、触发器或其他操作将任务加入队列中,然后又Workers执行

4:简单的使用案例:

1):此处用redis做celery的broker和backend,使用前需要先安装:

sudo apt-get install redis-server
sudo pip3 install redis
sudo pip3 install celery

2):创建一个tasks.py文件,里面是被执行的任务

扫描二维码关注公众号,回复: 2921811 查看本文章
# tasks.py
import celery

# 创建一个celery对象,并配置好backend和broker
app = celery.Celery("task", backend='redis://localhost:6379/0', broker='redis://localhost:6379/0')

# 被装饰成一个task
@app.task
def add(x, y):
    return x + y

3):开启tasks等待任务被执行

celery -A tasks worker -l info

4):创建一个脚本用来执行任务

# add_work.py
# 从task中导入add函数
from tasks import add

# 调用delay方法开启任务,delay返回一个AsyncResult 对象,调用get方法就可以得到结果
result = add.delay(10, 10)
print("任务执行完成:", result.get())

到此为止,简单的实例代码就完成了,更多的请参考官方文档:官方文档

猜你喜欢

转载自blog.csdn.net/xiamoyanyulrq/article/details/81273212