您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

异步Python Web框架比较

时间:2021-05-08 11:18:23  来源:今日头条  作者:飞鱼在浪屿
异步Python Web框架比较

 

这里测试的Python/ target=_blank class=infotextkey>Python异步框架几乎都与ASGI兼容(除了aiohttp)。

基准测试的目的不是测试部署(例如uvicorn与hypercorn等)或数据库(ORM,驱动程序),而是测试框架本身。基准检查检查请求解析(正文,标头,表单数据,查询),路由,响应。

接受请求并返回带有自定义动态标头的html响应解析上传的文件,将其存储在磁盘上并返回文本响应解析路径参数,查询字符串,JSON正文并返回JSON响应的综合统计。


测试硬件

该基准使用Github Action运行。根据github文档 ,运行的硬件规格为:

  • 2核vCPU(Intel®Xeon®Platinum 8272CL(Cascade Lake),Intel®Xeon®8171M 2.1GHz(Skylake))
  • 7 GB的RAM内存
  • 14 GB的SSD磁盘空间
  • 操作系统Ubuntu 20.04

使用gunicorn / uvicorn命令从Docker运行ASGI应用程序:

gunicorn -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8080 App:app

应用程序的源代码可以在此处找到 。

https://github.com/klen/py-frameworks-bench/tree/develop/frameworks

通过WRK实用程序收到结果:

wrk -d15s -t4 -c64 [URL]

基准测试包含三种测试:

  1. “简单”测试:接受请求并返回带有自定义动态标头的HTML响应。该测试仅模拟单个HTML响应。
  2. “上传”测试:接受上传的文件并将其存储在磁盘上。该测试模拟多部分表单数据处理并处理文件。
  3. “ API”测试:检查标头,解析路径参数,查询字符串,JSON正文并返回JSON响应。该测试模拟JSON REST API。

接受请求并返回带有自定义动态标头的HTML响应

该测试仅模拟单个HTML响应。按最大请求数/秒排序

框架

请求/秒

延迟50%(毫秒)

延迟75%(毫秒)

延迟平均(毫秒)

blacksheep 1.0.3

13805

3.71

6.29

4.61

muffin 0.70

12636

4.02

6.97

5.04

falcon 3.0.0

11495

4.43

7.62

5.54

starlette 0.14.2

10599

4.77

8.22

6.01

emmett 2.2.1

9922

5.06

8.88

6.42

Fastapi 0.63.0

7262

6.89

12.15

8.80

Sanic 21.3.4

6360

7.89

13.76

10.05

aiohttp 3.7.4.post0

5088

12.40

12.88

12.58

quart 0.14.1

2771

21.87

25.84

23.09

django 3.2

1368

45.20

52.33

46.72


解析上传的文件,将其存储在磁盘上并返回文本响应

该测试模拟多部分表单数据处理并处理文件。按最大请求数/秒排序

框架

请求/秒

延迟50%(毫秒)

延迟75%(毫秒)

延迟平均(毫秒)

blacksheep 1.0.3

4160

12.11

21.48

16.12

muffin 0.70

3203

15.87

27.90

19.96

falcon 3.0.0

3042

16.68

28.77

21.02

starlette 0.14.2

2747

18.59

31.54

23.34

emmett 2.2.1

1949年

25.65

45.74

32.79

Fastapi 0.63.0

1793年

27.77

49.93

35.64

Sanic 21.3.4

1788年

35.60

36.36

35.79

aiohttp 3.7.4.post0

1207

49.96

58.89

52.96

quart 0.14.1

1095

58.92

61.70

58.36

django 3.2

776

80.86

93.00

82.32


解析路径参数,查询字符串,JSON正文并返回JSON响应

该测试模拟一个简单的JSON REST API端点。按最大要求/秒排序

框架

请求/秒

延迟50%(毫秒)

延迟75%(毫秒)

延迟平均(毫秒)

blacksheep 1.0.3

7499

6.74

12.06

8.51

muffin 0.70

7232

6.93

12.29

8.83

falcon 3.0.0

7070

7.05

12.58

9.02

starlette 0.14.2

5602

8.95

15.91

11.40

emmett 2.2.1

5379

9.19

16.35

11.89

Fastapi 0.63.0

5126

9.66

17.36

12.50

Sanic 21.3.4

4406

11.30

20.27

14.50

aiohttp 3.7.4.post0

3232

19.70

20.24

19.81

quart 0.14.1

1767

36.32

38.11

36.19

django 3.2

1146

54.00

62.70

55.80


综合统计

综合基准测试结果

按已完成的请求排序

框架

请求已完成

平均延迟50%(毫秒)

平均延迟75%(毫秒)

平均延迟(毫秒)

blacksheep 1.0.3

381960

7.52

13.28

9.75

muffin 0.70

343635

8.98

15.82

11.34

falcon 3.0.0

322110

9.98

17.15

12.57

starlette 0.14.2

272250

13.12

23.29

16.73

emmett 2.2.1

243825

21.56

28.38

23.96

Fastapi 0.63.0

221715

11.25

19.63

14.32

Sanic 21.3.4

201915

15.32

27.45

19.65

aiohttp 3.7.4.post0

151620

22.57

23.16

22.73

quart 0.14.1

84495

39.04

41.88

39.21

django 3.2

49350

60.02

69.34

61.61



Tags:Web框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言Python的便利性和多功能性意味着它几乎被用于构建各行各业的软件。一个主要的利基是web服务,Python的开发速度和灵活性使其可以很容易地快速建立和运行网站。正如您可能...【详细内容】
2022-05-06  Tags: Web框架  点击:(79)  评论:(0)  加入收藏
2022年可选择的三个Rust Web框架:actix-web、warp和axum。 actix-web:4.0.0-rc.35,134,720Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架 warp:0.3.24,114,095以...【详细内容】
2022-02-25  Tags: Web框架  点击:(437)  评论:(0)  加入收藏
GO 语言爱好者的最佳Web框架如果你是自己写一个小应用程序,那你可能不需要Web框架。但是如果你要做产品,那么你肯定需要一个好的框架。如果你认为你有相应的知识和经验,你会自...【详细内容】
2022-02-01  Tags: Web框架  点击:(96)  评论:(0)  加入收藏
TechEmpower BenchmarkTechEmpower 的测试比较科学,包含 SQL 查询、JSON 序列化等各种测试,同时标注了哪些是使用了 ORM,哪些是 RAW 查询。 TechEmpower Benchmark Web Framew...【详细内容】
2021-10-12  Tags: Web框架  点击:(251)  评论:(0)  加入收藏
这里测试的python异步框架几乎都与ASGI兼容(除了aiohttp)。基准测试的目的不是测试部署(例如uvicorn与hypercorn等)或数据库(ORM,驱动程序),而是测试框架本身。基准检查检查请求解...【详细内容】
2021-05-08  Tags: Web框架  点击:(337)  评论:(0)  加入收藏
本篇文章我们主要介绍WSGI协议,该协议用来描述Server与Framework之间的通信接口,我们日常使用的Python WEB框架Django、Flask、web.py等都遵循了该协议。下面我们就来详细了解...【详细内容】
2020-11-26  Tags: Web框架  点击:(178)  评论:(0)  加入收藏
Solon 是Java世界里一个新的极易上手的Web框架。参考过 Javalin 、 Spring 等很多现有框架的设计。取名自海贼王里的角色,说是希望能像他一样能打 小。真的是小。最小的运行...【详细内容】
2020-08-11  Tags: Web框架  点击:(168)  评论:(0)  加入收藏
今天我们来探索另外的一种框架的搭建,这个框架就是web框架-flask微框架啦!首先我们带着以下的几个问题来阅读本文:1、flask是什么?有些什么功能?2、搭建web框架-flask微框架需...【详细内容】
2019-12-13  Tags: Web框架  点击:(184)  评论:(0)  加入收藏
之前在Web开发框架推导一文中我们一步步的搭建了一个开发框架。 在当时的情况下,还算满足需求。但是随着项目的逐渐完善,需求变更的频度逐渐变得比新增需求的频度高,原来框架的...【详细内容】
2019-10-11  Tags: Web框架  点击:(234)  评论:(0)  加入收藏
Node.js是专注高性能服务器开发的javascript运行环境。我们将在这篇文章向大家介绍几款主流Node.js Web框架的特点及优缺点,希望给大家作为参考。主要参考的Node.js Web框架...【详细内容】
2019-08-29  Tags: Web框架  点击:(455)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条