flask-Celery-RabbitMQ系统
前言:
1.工作流程:User-Brokers(flask)-Celery(任务分配)-RabbitMQ
生产者:在Flask应用内运行
消费者:处理后台任务Celery
消息传递者:RabbitMQ,信息的交互使用是用消息队列
Flask基本介绍以及操作:
Flask是依赖JinJa2模版引擎和WSGI服务的一个微型框架,用于接收请求并进行预处理
1.Flask 的框架模式 -
1.MTV结构
M :Models ,模型层,负责数据库建模
T :Templates ,模板层,用于处理用户显示的内容,如:html
V :Views ,视图层,处理与用户交互的部分内容。处理用户的请求并给出响应
2.经典三层结构 :MVC
M :Models ,模型层,负责数据库建模
V :Views,视图层,用于处理用户显示的部分内容如 :html
C :Controller,控制器,处理与用户交互的部分内容。处理用户的请求与响应
2.安装
pip3 install flask
3.创建注册对象
from flask import Flask
app=Flask(name)
4.flask-路由
在flask路由通过@app.route装饰器来进行相应请求响应函数
1.基本
@app.route(’/’)
2.带参数
@app.route(’/路径/<参数>’)
3.带指定参数类型
@app.route(’/路径/int:参数’)
4.设置请求
@app.route(‘/路径/’,methouds=[‘POST’])
Celery作用简介:
1.Celery作用:
异步分布式系统,主要任务管理分配任务到不同的服务器,并取得结果.在执行任务时需要一个消息中间件来接收和发送任务消息以及存储任务结果。(任务分配者,也是MQ/redis等的消费者)
2.特点:
1.配置和使用简单
2.当任务执行失败或发生断点,celery会自动尝试重新连接
3.快速,可以处理上百万的任务
4.灵活。大部分可以被扩展自定义
3.安装使用以及配置:
1.安装
pip/pip3 install celery
pip install Flask-Celery-Helper(flask 扩展辅助使用app来初始化celery对象)
pip freeze > requirments.txt
pip/pip3 install flower(可视化监控,python3 manage.py celery flower 启动)
注释:Flask-Celery-Helper用来初始化celery对象,在工厂模式创建app的时候现在tasks中倒入flask app对象才能完成初始化,可能导致循环导入错误,需要有中间件帮助完成初始化
2.组成:
消息中间件(Message broker)
任务执行单位(worker)
任务执行结果存储(task result store)
3.worker,process脚本布置
1.worker脚本tasks.py
#创建celery实例/应用,用于创建任务,管理职称入口,必须课被倒入
from celery import Celery
app=Celery('当前模块的名称',broker(中间件)="amqp://localhost")
@app.task
def fn(x,y):
return x+y
定一个任务
2.在其他py文件调用任务delay(),返回AsyncResult查看状态,失败则返回一场
from tasks improt add
result=add.delay(2,3)
查看任务是否完成处理:result.ready() result.get()ß
4.运行
celery -A tasks.py(创建实例py=) worker --loglevel=info
4.支持
中间件:RabbitMQ(默认),redis,MongoDB等
并发:多进程,多线程/单线程
结果存储:Redis、MongoDB、memcached等
序列化:pickle、json、zlib、bzip、密码学消息签名
RabbitMQ作用简介:
1.作用于分布式系统存储转发消息.支持高并发支持异步操作,支持持久化(小概率需要通过事物处理)
2.
生产者:消息的生产者,将消息发送到MQ
消费者:消息的消费者,从MQ接收消息并进行处理
Exchange:交换器,将生产者的消息根据规则路由到不同的队列以便不同的消费者拿到对应的消息
MQ常用的Exchange Type:fanout、direct、topic
fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中,广播
direct:把消息投递到那些binding key与routing key完全匹配的队列中。
topic:将消息路由到binding key与routing key模式匹配的队列中。
五.操作步骤python
#注意事项:
1.Flask-Celery-Helper官方目前只支持到python3.4,但使用py3.6也没有问题;Flask-Celery-Helper不支持celery4.X的版本,否则报错,因此需要使用celery3.x的版本
2.在Flask中创建celery的实例对象的名字必须是flsk应用程序app名字,否则celery启动会失败(e.g:flask_celery)
3.celery必须能顺利家在初始化文件
构建flask框架,在基础上在使用celery任务调度
工厂模式下flask_celery具体操作步骤:
1.创建celery实例-->extensions.py
2.修改配置文件注册celery到flask中.-->app.py
3.设置task任务文件函数逻辑-->tasks.py
4.创建app的时候完成celery的加载,celery在flask上下文完成初始化
e.g flask_celery