测试基本信息

主题:比较异步框架和同步框架在RedisIO操作的性能差异

python版本:python 3.8

数据库:redis 5.0.7

压测工具:locust

web框架:同步:flask 异步:starlette

请求并发量: 模拟10个用户

服务器配置: Intel(R) i7-12700F

客户端配置:Intel(R) i7-8700 3.20GHz

flask 同步框架

flask是python中轻量级web框架,特点是灵活、轻量级、扩展性高。同时flask是一个同步框架,操作Redis使用的是官方最推荐的包redis-py。redis-py早期版本只支持同步模式,高版本中已经支持异步模式。接口功能非常简单,连接Redis从中读取一个key,已经提前写入redis。

from flask import Flask
from redis import StrictRedis app = Flask(__name__) @app.route('/user')
def user_list():
redis_conn = StrictRedis(host="127.0.0.1", port=6379, decode_responses=True)
res = redis_conn.get("name")
return res if __name__ == '__main__':
app.run(port=8090, host="0.0.0.0")

压测结果

并发量:342

starlette 异步框架

starlette 是当下火热的异步框架fastapi依赖的唯二模块之一,主要用于异步请求的处理。redis-py 既支持同步模式又支持异步模式,所以在starlette这个异步框架中就使用其异步模式。

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
from uvicorn.main import run
from redis.asyncio import StrictRedis async def user(request):
redis_conn = StrictRedis(host="127.0.0.1", port=6379, decode_responses=True)
res = await redis_conn.get("name")
await redis_conn.close()
return JSONResponse(res) app = Starlette(debug=True, routes=[Route('/user', user),]) if __name__ == "__main__":
run(app, host="0.0.0.0")

压测结果

并发量:1361



对比

并发曲线图对比:

参数对比:

框架 Redis IO 纯框架无IO 文件IO 数据库IO
flask 315 463 453 225
starlette 1361 1539 1538 1496
性能比(异步/同步) 4.3 3.3 3.4 6.6

总结

在Redis IO方面,异步框架的性能是同步框架的4.3倍左右,和文件IO、数据库IO大体一致。横向和数据库IO比较略有下降,多次测试确实如此,猜测和redis-py模块的异步模式有关。

本篇是对比系列最后一篇。从异步密切相关的IO任务对比中可以切实看出异步编程的并发量比较高,后续篇幅中将讲解python中异步编程的原理和使用。

Python异步编程之web框架 异步vs同步 Redis并发对比的更多相关文章

  1. python高级编程之 web静态服务器

    返回固定数据 import socket def request_handler(new_client_socket): """ 响应客户端请求的核心函数 "& ...

  2. python异步编程之asyncio

    python异步编程之asyncio   前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率, ...

  3. 异步编程之Promise(3):拓展进阶

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  4. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  5. 200行自定义异步非阻塞Web框架

    Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞 ...

  6. Tornado----自定义异步非阻塞Web框架:Snow

    Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞 ...

  7. 150行代码搭建异步非阻塞Web框架

    最近看Tornado源码给了我不少启发,心血来潮决定自己试着只用python标准库来实现一个异步非阻塞web框架.花了点时间感觉还可以,一百多行的代码已经可以撑起一个极简框架了. 一.准备工作 需要的 ...

  8. 异步编程之Generator(1)——领略魅力

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  9. (翻译)异步编程之Promise(1):初见魅力

    原文:https://www.promisejs.org/ by Forbes Lindesay 异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2) ...

  10. net异步编程之await

    net异步编程之await 初探asp.net异步编程之await   终于毕业了,也顺利进入一家期望的旅游互联网公司.27号入职.放肆了一个多月没写代码,好方啊. 另外一下观点均主要针对于await ...

随机推荐

  1. Centos7安装配置MySQL 5.6

    Centos7安装配置MySql 5.6 首先下载MySql5.6的安装包,具体安装方式分为yum安装与离线安装.在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL. ...

  2. Hugging News #0331: Hugging Papers 来啦,快来认领你的论文!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  3. 随机服务系统模拟—R实现(一)

    排队论--随机服务系统 日常生活中存在大量有形和无形的排队或拥挤现象,如旅客购票排队,市内电话占线等现象.排队论的基本思想是 1909 年丹麦数学家.科学家,工程师 A. K. 埃尔朗在解决自动电话设 ...

  4. ARouter源码分析

    源码看过好几遍了,但是总是会忘记,特此记录下 先从注解处理器开始 BaseProcessor是其他三个注解处理器的抽象类,子类去实现process方法.在其中的init方法中会获取我们的module模 ...

  5. Python程序笔记20230306

    判断闰年 初始版本 year = input('请输入一个年份:') while not year.isdigit(): year = input("抱歉,您的输入有误,请输入一个整数:&q ...

  6. React课堂笔记1

    一.概要 React是用于构建用户界面的MVVM框架. React拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它.认为它可能是将来Web开发的主流工具之一. 官网:https://z ...

  7. 【深度思考】聊聊JDK动态代理原理

    1. 示例 首先,定义一个接口: public interface Staff { void work(); } 然后,新增一个类并实现上面的接口: public class Coder implem ...

  8. S3 对象重命名

    本文所述操作适用于兼容 S3 协议的所有存储框架,包括 AWS S3.Aliyun OSS.MinIO.Ceph 等. 不知为何,截止目前,S3 协议并不包含对象重命名的接口.如果有重命名对象的需求, ...

  9. Typora用法:

    Typora用法: 一:标题 模板: #+空格+标题名+回车 一级标题 二级标题 三级标题 四级标题 五级标题 二:字体 加粗 斜体 斜体加粗 删除线(esc键下面的那个键) 上标:我是上标 下表:我 ...

  10. uniapp小程序开发准备工作

    1.下载HbuilderX HBuilderX官网:https://www.dcloud.io/hbuilderx.html 下载正式版--下载完后解压--双击打开HBuilderX.exe文件就可以 ...