美文网首页python自学
Python常见Web框架性能对比(一)

Python常见Web框架性能对比(一)

作者: justonlyyo | 来源:发表于2020-03-17 14:21 被阅读0次

    首先:

    • 没有专用的服务器
    • 没有测试专用的代码片段
    • 没有牛人背书

    这只是一个简单的对比: 用一台普通的机器,以尽量相同的方式分别部署不同Web框架编写的一段简单程序.然后使用压力测试程序run一下,做个chart出来.直观的反应一下. .python的常用框架性能之间的差别.较真的杠精现在就可以出门左转了.

    先要介绍一下我的测试环境: acer的商务机,具体配置是酷睿8,8g,1t的5400转机械硬盘, 操作系统是ubuntu 18.04 desktop

    本次使用的代码特别简单,所以因为个人能力不济造成性能下降的可能性比较小,哈哈.本次测试的是一些常用的python的Web开发框架.下面有请选手登场:

    • Django 不用说,最早进入中国的python web框架之一, 一站式结构, 文档齐全, 功能强大.用户众多,入坑首选之一
    • Flask 知名度和Django在伯仲之间的python web框架,和相对重型的Django不同,flask标榜自己的轻量级, 做个单纯的web框架,只负责路由和视图部分,其他的交给插件部分(flask众多的插件也是亮点之一).入坑首选之二
    • AioHttp 一个异步的web框架,包含服务端和客户端,推荐python 3.5+, 视图函数是异步写法.也是因为异步,所以性能出色.
    • Sanic 也是异步类flask的web框架,无需插件即支持websocket,因为是类flask框架,所以从flask 转过来的话无论学习还是维护成本都是极低的.性能自己说也是非常高的.在国外有大量的生产环境案例. 插件/中间件很丰富.
    • Tornado 是一个facebook开源的异步框架,自己的文档说速度相当快,国内也有很多人这么说,我不怕剧透,其实他的性能从4.2时代就已经很落伍了.而且由于他的异步机制是自己搞的一套.很多东西写法都很独特.学习成本较高.所以,本人是不推荐学习的.也没任何优势而已,这里把他拉出来就是为了衬托同行.
    • Bottle 一个超简洁的轻量级web框架.(5年之前)以性能著称.同步模式.国外国内都不算应用广.比flask更简洁,但是插件也比较少.
    • Falcon 这个国内用的不多,但是国外用户还是很多的.以安全稳定著称(就是所谓的线程安全那种,你懂的),自说是性能和安全的最佳平衡.有很多生产环境的案例.主要是用于提供接口服务. 语法稍微繁琐一点.
    • Vibora 一个很新的异步模式的类flask的web框架,flask开发者友好(要抢flask的饭碗?),性能也是变态的好.个人觉得不错.(毕竟类flask的框架,对插件的依赖是可有可无的)

    很多人都知道Python语言的代码,以运行缓慢著称(我这是引用众数的观点.不抬杠),所以很多人诟病Python的web框架运行缓慢.不过,个人的观点是: 实务中, 特别当你不是那么大的分布式的部署的时候,性能瓶颈往往是压在数据库而不是web框架上.你可以根据自己的网站/业务的访问量计算一下你选中的Web框架是否能满足你的需求?

    测试代码就是各自的文档中的hello world代码.部署上能用gunicorn的就用,有些部署比较特殊的框架那没办法,总是,尽量减少部署方式上的差异(python的web框架,部署方式对性能的影响还是非常大的).

    测试方式使用siege做并发压力测试,从50客户端开始,每次测试递增50个客户端,一直到最后1000个客户端,每次5000个事务请求. 每个框架做400批次压力测试.最后的结果清洗后做个统计,使用pygal生成图表. x轴是客户端数量,y轴是每秒处理多少事务(TPS),所有的测试结果都是100%完成.

    测试结果

    Django

    Django_bar.png

    Flask

    Flask_bar.png

    Bottle

    Bottle_bar.png

    Falcon

    Falcon_bar.png

    从这里开始,都是异步的框架了

    Tornado

    Tornado_bar.png

    Sanic

    Sanic_bar.png

    AioHttp

    AioHttp_bar.png

    Vibora

    Vibora_bar.png

    全家福

    total_bar.png

    个人总结:

    • 无论同步还是异步模式,所有的框架在低并发(50客户端以内)性能都是出奇的好.如果使用QPS的换算公式的话.你会发现,如果一般性类的网站(企业门户,个人博客之类),速度上完全没问题.
    • 并发能力上来说,Django和Flask难兄难弟日常垫底儿.但这并不影响他们的广泛应用.而且,即使是他们的垫底性能,也能在1000客户端的情况下维持每秒1000上下的TPS.坦白的说,这算不上高性能,但是满足绝大多数站点(尤其是创业初期的产品原型)的需求是没问题了.
    • 同步工作模式和异步工作模式相比,并发能力上全面落后挨打.甚至被秒杀.但是,异步工作模式在代码书写上是有要求的(有些coder常说的一步异步,处处异步并不是没有道理的).并且异步提升的是单位时间的处理能力.在你的服务器崩溃之前,异步工作模式并不会提供更高的处理能力.
    • Tornado 成也性能,败也性能.在异步的时代,tornado以较高学习成本,捉急的性能,让成为拍在沙滩上的前浪.至少现在.不要说tornado的性能高什么的了.
    • Vibora 性能确实变态. 即使1000客户端,也能维持超过1万的TPS.值得关注一下.

    以上是空载的数据,如果加上本地的数据库负载(原子操作).所有的框架没有任何差别.瓶颈都在数据库IO上.

    python的web框架多如牛毛(远不像国内的翻来覆去django,flask,tornado三大件).特点也是千差万别.基本上越新的框架越有后发的优势,我会在工作之余,做一些相关的对比工作.

    相关文章

      网友评论

        本文标题:Python常见Web框架性能对比(一)

        本文链接:https://www.haomeiwen.com/subject/dhyzehtx.html