经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python异步编程之web框架 异步vs同步 文件IO任务压测对比
来源:cnblogs  作者:金色旭光  时间:2023/5/30 8:54:02  对本文有异议

image

测试基本信息

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

flask 同步框架

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

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

压测结果

并发量:453
image

aiohttp 异步框架

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

  1. from aiohttp import web
  2. import aiofiles
  3. routes = web.RouteTableDef()
  4. @routes.get("/file")
  5. async def file(request):
  6. async with aiofiles.open("demo.txt") as fp:
  7. text = await fp.read()
  8. return web.Response(text=text)
  9. if __name__ == '__main__':
  10. app = web.Application()
  11. app.add_routes(routes)
  12. web.run_app(app)

压测结果

并发量:1490
image

starlette 异步框架

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

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

压测结果

并发量:1538
image

对比

并发曲线图对比:
image

参数对比:

框架 文件IO并发量 延迟 纯框架无IO并发量
flask 453 21 ms 463
aiohttp 1490 6 ms 1455
starlette 1538 6 ms 1539

总结

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

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

原文链接:https://www.cnblogs.com/goldsunshine/p/17441557.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号