当前位置: 首页 > news >正文

【Quart 框架——来源于Flask的强大且灵活的异步Web框架】

目录

  • 前言
  • 一、Quart简介
    • 1-1、简介
    • 1-2、与flask的区别
  • 二、快速开始
    • 2-1、安装
    • 2-2、基本用法
  • 三、核心功能
    • 3-1、异步路由
    • 3-2、WebSockets 支持
    • 3-3、中间件
    • 3-4、蓝图 (Blueprints)
  • 四、部署
    • 4-1、使用uvicorn部署
    • 4-2、使用hypercorn部署
  • 五、案例分析
  • 总结


前言

Quart 是一个基于 Python 的异步 Web 框架,灵感来自 Flask。它结合了 Flask 的易用性和成熟度,并添加了对 Python 异步特性的支持。

一、Quart简介

1-1、简介

Quart 是一个基于 Python 的异步 Web 框架,灵感来自 Flask。它结合了 Flask 的易用性和成熟度,并添加了对 Python 异步特性的支持。使用Quart你可以

  • 渲染和提供HTML模板
  • 构建Json API
  • 服务WebScoket
  • 流式请求、响应。

在这里插入图片描述

Quart 旨在提供一个类似于 Flask 的简单且灵活的 Web 框架,同时支持 Python 的异步功能(async 和 await)。这使得 Quart 能够处理高并发和异步 I/O 操作,适用于需要处理大量并发连接的应用程序,如实时 Web 应用和微服务。

1-2、与flask的区别

  • 异步支持:Quart 的最大特点是对异步操作的支持,而 Flask 主要是同步的。
  • WebSockets:Quart 内置对 WebSockets 的支持,而 Flask 需要使用 Flask-SocketIO 扩展。
  • 路由定义:Quart 的路由定义和 Flask 基本一致,但 Quart 的路由处理函数可以是异步的。

二、快速开始

2-1、安装

安装: python的版本必须大于3.8。

pip install quart
pip install python

2-2、基本用法

from quart import Quart, render_template, websocketapp = Quart(__name__)@app.route("/")
async def hello():return await render_template("index.html")@app.route("/api")
async def json():return {"hello": "world"}@app.websocket("/ws")
async def ws():while True:await websocket.send("hello")await websocket.send_json({"hello": "world"})if __name__ == "__main__":app.run()

三、核心功能

3-1、异步路由

Quart 允许你定义异步路由处理函数,使得处理异步 I/O 操作更加高效。

@app.route('/async')
async def async_route():# 异步操作await asyncio.sleep(1)return 'This is an async route'

3-2、WebSockets 支持

Quart 内置对 WebSockets 的支持,可以轻松处理实时通信。

from quart import websocket@app.route('/ws')
async def ws():while True:message = await websocket.receive()await websocket.send(f'You said: {message}')

3-3、中间件

Quart 支持中间件,可以在请求处理之前或之后执行一些操作。

@app.before_request
async def before_request():print("This runs before each request")@app.after_request
async def after_request(response):print("This runs after each request")return response

3-4、蓝图 (Blueprints)

Quart 支持蓝图,用于模块化应用程序的路由和视图。

from quart import Blueprintbp = Blueprint('example', __name__)@bp.route('/example')
async def example():return 'This is an example route'app.register_blueprint(bp, url_prefix='/bp')

四、部署

4-1、使用uvicorn部署

安装:

pip install uvicorn

运行: 在项目根目录下运行以下命令,这里 app:app 表示在 app.py 文件中有一个名为 app 的 Quart 应用实例。

uvicorn app:app

4-2、使用hypercorn部署

安装:

pip install hypercorn

部署: 指定端口和启用自动重载

hypercorn app:app --bind 0.0.0.0:8000 --reload

五、案例分析

概述:这段代码创建了一个基于 Quart 框架的异步 Web 应用程序,暴露了一个 POST 接口 /aiops。该接口接收 JSON 请求,提取其中的 prompt 字段,并调用 run_query 函数处理这个 prompt。主要功能如下:

  • logger.add(‘app.log’) 记录日志到app.log
  • 禁用 Quart 和 werkzeug 的默认日志,以避免日志冗余。
  • 定义名为aiops的post路由并且构建异步处理函数
  • 异步获取请求中的json数据
from quart import Quart, request, jsonify
from querySLSLog import run_query
from loguru import logger
import logging
from querySLSLog import run_queryapp = Quart(__name__)logger.add('app.log')
app.logger.disabled = True
werkzeug_logger = logging.getLogger('werkzeug')
werkzeug_logger.disabled = True@app.route('/aiops', methods=['POST'])
async def run_code():data = await request.jsonprompt = data.get('prompt')if not prompt:logger.error(f"提取prompt失败: {request.data.decode('utf-8')}")return jsonify({'error': 'No prompt provided'}), 400logger.info(f"prompt: {prompt}")try:result = await run_query(prompt)logger.info(f"result: {result}")result = result.contentreturn jsonify(result)except Exception as e:error = f"调用run_query方法失败: {e}"logger.error(error)return jsonify(error)if __name__ == '__main__':app.run(host='0.0.0.0', port=6789)

参考文章:

Quart

总结

Quart 是一个强大且灵活的异步 Web 框架,适用于需要高并发和异步 I/O 操作的应用程序。它结合了 Flask 的简单性和 Python 异步特性的优势,是开发现代 Web 应用和微服务的一个有力工具。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)
  • K8S 上部署 Emqx
  • 【C++】C++中的堆和栈介绍和区别
  • 酷克数据亮相第13届PostgreSQL中国技术大会,获数据库杰出贡献奖
  • LVS+Keepalive高可用
  • git commit时报错,LF will be replaced by CRLF the next time Git touches it
  • 视频监控汇聚平台LntonCVS视频集中存储平台解决负载均衡的方案
  • C++初阶:类和对象(二)
  • jvm 07 GC算法,内存池
  • 开源科学工程技术软件
  • 【docker 部署springboot项目】
  • 第一章 Typescript小白快速入门
  • Flowable-流程图标与流程演示
  • Flutter对接FlutterBugly 报错Zone mismatch
  • 鸿蒙开发 -本地数据库操作
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • canvas 五子棋游戏
  • Cumulo 的 ClojureScript 模块已经成型
  • Druid 在有赞的实践
  • Linux CTF 逆向入门
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • react 代码优化(一) ——事件处理
  • STAR法则
  • Terraform入门 - 3. 变更基础设施
  • vuex 笔记整理
  • Wamp集成环境 添加PHP的新版本
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 搞机器学习要哪些技能
  • 观察者模式实现非直接耦合
  • 力扣(LeetCode)22
  • 前端路由实现-history
  • 限制Java线程池运行线程以及等待线程数量的策略
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • $ git push -u origin master 推送到远程库出错
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (黑马C++)L06 重载与继承
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (数据结构)顺序表的定义
  • (算法设计与分析)第一章算法概述-习题
  • (转)平衡树
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @Autowired和@Resource的区别
  • @Autowired和@Resource装配