python消息队列celery高可用_python之celery队列模块

一、celery队列简介

Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery.

1.1使用场景

1.你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以继续做其它的事情。

2.你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天 是客户的生日,就给他发个短信祝福

1.2celery原理

Celery 在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果, 一般使用rabbitMQ or Redis 或者是数据库来存放消息的中间结果

Celery优点:

简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的

高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务

快速:一个单进程的celery每分钟可处理上百万个任务

灵活: 几乎celery的各个组件都可以被扩展及自定制

Celery缺点:

1.目前只能在Linux系统上有较好的支持

Celery工作流程图:

1. Celery Beat:任务调度器,Beat进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列。

2. Celery Worker:执行任务的消费者,通常会在多台服务器运行多个消费者来提高执行效率。

3. Broker:消息代理,或者叫作消息中间件,接受任务生产者发送过来的任务消息,存进队列再按序分发给任务消费方(通常是消息队列或者数据库)。

4. Producer:调用了Celery提供的API、函数或者装饰器而产生任务并交给任务队列处理的都是任务生产者。

5. Result Backend:任务处理完后保存状态信息和结果,以供查询。Celery默认已支持Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy等方式。

Celery的架构图如图所示:

d799753c121f080a9ead5c4e392e49bf.png

在传统的web应用中,Django的web页面通过url的映射到view,view再执行方法,如果方法需要调用大量的脚本,执行大量的任务,页面就会阻塞,如果在项目中使用Celery队列.首先用户的任务会被celery放到broker中进行中转,然后将任务分为一个个的task来执行,由于celery是异步机制,所以会直接给用户返回task_id,页面拿到task_id就可以执行后续的操作,比如查看任务进度,暂停任务,而无需等待所有任务全部执行完毕,才能看到页面。

二、celery安装

2.1安装:

1.在linux(ubuntu)系统上首先安装Celery队列

pip3 install Celery

2.在linux安装redis

sudo apt-get install redis-server

3.在linux上安装redis-celery中间件

pip3 install -U "celery[redis]"

4.启动redis

sudo /etc/init.d/redis-server start

三、celery使用

3.1简单使用

命名为tasks.py

from celery import Celery

app = Celery('tasks',

broker='redis://localhost',

backend='redis://localhost')

@app.task

def add(x,y):

print("running...",x,y)

return x+y

启动监听并开始执行该服务

celery -A tasks worker -l debug

在开启一个终端进行测试任务

进入python环境

from tasks import add

t = add.delay(3,3) #此时worker会生成一个任务和任务id

t.get() #获取任务执行的结果

t.get(propagate=False) #如果任务执行中出现异常,在client端不会异常退出

t.ready()#查看任务是否执行完毕

t.traceback #打印异常详细信息

3.2项目中创建celery<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值