Python异步编程之web框架 异步vs同步 文件IO任务压测对比

news2024/12/23 9:14:52

主题:比较异步框架和同步框架在文件IO操作的性能差异
python版本:python 3.8
压测工具:locust
web框架:同步:flask 异步:aiohttp、starlette
异步文件模块:aiofiles、anyio.Path
请求并发量: 模拟10个用户
服务器配置: Intel(R) i7-12700F
客户端配置:Intel(R) i7-8700 3.20GHz

2|0flask 同步框架

flask是python中轻量级web框架,特点是灵活、轻量级、扩展性高。同时flask是一个同步框架,文件操作内容是在请求中打开一个文件demo.txt,读取文件内容,然后返回文件内容。

 

from flask import Flask, request app = Flask(__name__) @app.route('/file') def file(): with open("demo.txt") as f: text = f.read() return text if __name__ == '__main__': app.run(port=8090, host="0.0.0.0")

2|1压测结果

并发量:453

image

3|0aiohttp 异步框架

aiohttp 是一个基于 asyncio 的异步 HTTP 网络模块,它既提供了服务端,又提供了客户端。由于python内置函数open不支持异步读写,所以选用异步文件读写速度最快的 aiofiles 模块,打开同一个demo.txt文件。

 
from aiohttp import web import aiofiles routes = web.RouteTableDef() @routes.get("/file") async def file(request): async with aiofiles.open("demo.txt") as fp: text = await fp.read() return web.Response(text=text) if __name__ == '__main__': app = web.Application() app.add_routes(routes) web.run_app(app)

3|1压测结果

并发量:1490

image

4|0starlette 异步框架

starlette 是当下火热的异步框架fastapi依赖的唯二模块之一,主要用于异步请求的处理。anyio是starlette依赖的包,一个封装asyncio的高级异步库,自带异步io操作。

from starlette.applications import Starlette from starlette.responses import JSONResponse from starlette.routing import Route from anyio import Path async def file(request): text = await Path('demo.txt').read_text() return JSONResponse(text) app = Starlette(debug=True, routes=[Route('/file', file),])

4|1压测结果

并发量:1538

image

5|0对比

并发曲线图对比:

image

参数对比:

框架文件IO并发量延迟纯框架无IO并发量
flask45321 ms463
aiohttp14906 ms1455
starlette15386 ms1539

6|0总结

在文件读写方面,异步框架性能是同步框架的3倍左右。同一个框架相较于无IO并发时性能略有下降但并不是很多,这说明文件IO阻塞并严重。下一篇比较数据库IO的并发性能。

准备连载一系列关于python异步编程的文章。包括同异步框架性能对比、异步事情驱动原理等。首发微信公众号,欢迎关注第一时间阅读。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EPICS sequencer状态机示例

状态机源代码: #define PVSYS "pvsysca" #define LIGHT "{prefix}:light" #define LIGHTON "{prefix}:lightOn" #define LIGHTOFF "{prefix}:lightOff" #define VOLTAGE "{prefix}:voltage" #define LO…

机器人过程自动化(RPA)入门 3. 顺序、流程图和控制流程

到目前为止,我们已经了解了RPA是什么,并且我们已经看到了通过记录任务的活动并运行它来训练UiPath机器人是多么简单。使用记录器的UiPath可以很容易地自动化日常任务。在我们开始自动化复杂的任务之前,让我们学习如何控制从一个到另一个的活动…

【算法分析与设计】算法概述

目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析(一)算法时间复杂性分析(二)算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…

Prometheus+Grafana监控K8S集群(基于K8S环境部署)

文章目录 一、环境信息二、部署前准备工作三、部署Prometheus监控系统四、部署Node_exporter组件五、部署Kube_state_metrics组件六、部署Grafana可视化平台七、Grafana可视化显示Prometheus收集数据八、Grafana添加监控模板九、拓展 一、环境信息 1、服务器及K8S版本信息&…

现代卷积网络实战系列4:PyTorch从零构建VGGNet训练MNIST数据集

🌈🌈🌈现代卷积网络实战系列 总目录 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、MNIST数据集处理、加载、网络初始化、测试函数 2、训练函数、PyTorch构建LeNet网络 3、PyTorch从零构建AlexNet训练MNIST数据…

【7.Vue 利用Heatmap.js 制作自定义热力图】

1.效果 2.背景 需要根据后端检测的设备的数值显示设备周围的清洁度,用户希望用热力图的方式来显示,于是在网上找了资料,发现可以用Heatmap.js来实现。 Heatmap.js 官网:https://www.patrick-wied.at/static/heatmapjs/ 3.引入组件 安装Heatmap.js npm install Heatmap.…

京东(JD)——利用人工智能实现自动零售

京东(JD)是中国最大的在线零售商之一,也是一家以高科技和人工智能物流而闻名的公司,其人工智能物流系统包括无人机交付系统、自动配送快递车以及机器人自动化配送中心。 京东一直致力于将机器人用于尽可能多地实现零售业务的物理自动化。 1.京东的人工智…

Nginx WEB访问与Linux授权约束

看到所有文件的权限都是没有的,即便所有的权限都没有即使nginx做了配置,这些都是正确的。那么在浏览器真正去访问的时候是不能访问的。 [rootjenkins html]# ls -l total 4 drwxr-xr-x 2 root root 23 Sep 16 17:43 dist ---------- 1 root root 33 Sep …

解决百度网盘登录安全验证显示空白页

百度网盘Windows客户端第一次登陆时会让验证身份 不知道什么BUG,有的系统能直接验证,有的系统不能,对于我这种频繁换环境的是真的难受。 试过网上各种方法,什么重启、重装、在IE设置中添加信任站点、清除IE缓存都不行。 但是这些…

nodejs+vue 医院病历管理系统

系统使用权限分别包括管理员、病人和医生,其中管理员拥有着最大的权限,同时管理员的功能模块也是最多的,管理员可以对系统上所有信息进行管理。用户可以修改个人信息,对医院病历信息进行查询,对住院信息进行添加、修改…

手机资讯:华为Mate60 Pro上手体验三天的使用体验

最近华为Mate60 Pro开售的消息引爆了整个数码科技圈,毕竟还没开发布会就直接开售新机,这放在整个手机界都是绝无仅有的,并且华为也官方放出了华为Mate60系列的所有参数配置,但唯独没有公开芯片型号和网络信号类型,不免…

ICCV 2023|Occ2Net,一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法...

本文为大家介绍一篇入选ICCV 2023的论文,《Occ2Net: Robust Image Matching Based on 3D Occupancy Estimation for Occluded Regions》, 一种基于3D 占据估计的有效且稳健的带有遮挡区域的图像匹配方法。 论文链接:https://arxiv.org/abs/23…

SQLyog安装教程

安装完MySQL数据库之后,为了便于我们对数据库的操作,所以安装一个用于数据库可视化的软件SQLyog。以下是安装步骤: 1. 解压之后安装。 选择SQLyog.exe或者SQLyog-11.2.4-0.X86。打开安装包之后,需要改安装路径的该安装路径&…

智慧公厕数字技术实现城市公共厕所智能升级

随着城市化进程的不断加快,城市公共厕所作为一个重要的基础设施,扮演着不可忽视的角色。然而,在现实中,很多城市公共厕所的设施陈旧、管理不善,给人们的生活带来了许多不便。为了解决这一问题,智慧公厕数字…

节省草稿纸的方法

问题描述:平时需要写一些简单的算法,手边没有草稿纸怎么办? 问题解决:可以使用一个QQ截图或者其他截图,然后使用画笔在截图上进行简单写画。在进行网上授课时,也可以常用这种方法。 如下图所示&#xff1…

PriorityQueue如何确定构建的是大根堆还是小根堆

PriorityQueue可以自定义传入的Comparator来比较内部元素的大小&#xff0c;Comparator比较时的返回如下&#xff1a; 如果o1 o2 ,返回0 如果o1 < o2 ,即 o1-o2 < 0 ,则返回负数 如果o1 > o2 ,即 o1-o2 > 0 ,则返回正数 如下是PriorityQueue类中新放入元素时执行的…

数据一致性:核心概念与实现策略

在当今的信息时代&#xff0c;数据已经成为了企业的核心资产之一。然而&#xff0c;随着数据量的不断增长和应用场景的不断扩大&#xff0c;如何保证数据的一致性成为了一个重要的挑战。数据一致性不仅关系到系统的正确性和可靠性&#xff0c;也直接影响到用户的体验和企业的业…

nrf52840 DK接口

外部接口 Arduino接口 按键和LED接口 Debugout接口&#xff08;P20&#xff09; Debugout接口&#xff08;P19)

rm误删文件恢复

rm误删文件恢复 问题描述安装extundeleteyum安装extundelete编译安装extundelete 常用参数动作(action)&#xff1a; 尝试数据恢复前置条件卸载磁盘分区查看被删除数据信息 恢复文件恢复指定inode号文件恢复指定文件名恢复指定目录恢复所有可恢复文件恢复指定时间的文件恢复指定…

图像绘制-线段、矩形、圆形、椭圆等

在实际运用中&#xff0c;我们会在图片上添加一些图形&#xff0c;比如目标检测时在物体周围画个矩形框&#xff0c;人脸识别中将人脸的关键点用点&#xff08;圆形&#xff09;标出来。 OpenCV常用的形状绘制方法&#xff1a; 线段的绘制 线段的绘制是使用cv2.line(img, pt…