Python的三大Web框架性能分析滚动

来源:未知 / 作者:admin / 2018-06-15 09:17
北京联盟摘要:【Python的三大Web框架性能分析_本文的数据涉及到之前遇到过的问题】简略摘要:本文原始标题为:Python的三大Web框架性能分析---来源是: 本文的数据涉及到之前遇到过的问题,大概一次http请求到收到响应需要多少时间。这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析。 这里使用之前的一个报告数据:Pytho

本文原始标题为:Python的三大Web框架性能分析---来源是:

本文的数据涉及到之前遇到过的问题,大概一次http请求到收到响应需要多少时间。这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析。

这里使用之前的一个报告数据:Python'sWebFrameworkBenchmarks。本文仅关注目前最常用的三大Python框架:Django、Flask以及Tornado。

报告主要比较三点:

JSON:序列化一个对象,并返回一个json。

远程性能:从远程服务器上返回httpresponse的时间

数据库性能:使用ORM(对象关系映射)从数据库获取数据,并渲染到模板上的时间

最基本的json测试:Django与Flask占优

单纯在本地测试json的序列化,Django完成一次json序列化的平均时间42.52毫秒,每秒请求量4762次。

Flask在此项测试中,与Django的比较不相上下,Flask平均时间43.33毫秒,每秒请求量4630次。

Tornado完成json序列化的平均时间高达77.51毫秒,是所有框架中耗时最长的,每秒请求数是2578次,也是低于Django与Flask的水准。

这仅仅说明框架在本地处理json的速度。框架还涉及httprequest/response以及数据库的读写,后面还需要综合来分析框架的性能。

本文原始标题为:Python的三大Web框架性能分析---来源是:

本文原始标题为:Python的三大Web框架性能分析---来源是:

处理远程http请求的能力:Tornado占绝对优势

从这项测试开始,Tornado的强悍开始显现。Tornado完成http请求的平均时间是1.04秒,而Flask是3.34秒,Django是3.48秒,http响应速度Tornado比Flask以及Django快三倍。

值得注意是,如果综合考虑http相应速度以及json处理速度,如果把两项指标的平均时间相加:Tornado耗时1114.48毫秒,Flask是3387.60毫秒,Django是3519.88毫秒。

Tornado的好成绩得益于其自带的异步特性,而Django与Flask是同步框架,在处理请求时性能受限。但是实际使用中,一般是Django/Flask+Celery+Redis/Memchaned/RabbitMQ的模式,由此带上了异步处理的能力。

本文原始标题为:Python的三大Web框架性能分析---来源是:

本文原始标题为:Python的三大Web框架性能分析---来源是:

数据库与模板处理性能:Tornado与Flask旗鼓相当

Django饱受诟病的地方就是DjangoORM确实很慢,加上模板处理时间,Django的平均时间2904.04毫秒,每秒处理请求量42.9次。

然而Django的大部分功能是建立在其DjangoORM基础上,比如models,admin,forms甚至第三方框架django-rest-framework。

Django的开发效率与维护非常棒,然而DjangoORM深度绑定了该框架,如果你需要把DjangoORM换成其它轮子,那么也意味着Django的诸多优秀特性将从此告别。

Flask事实上的ORM是SQLAlchemy,SQLAlchemy比MySQLdb的耗时多5%左右,所以是性能相当不错的数据库ORM。得益于SQLAlchemy的优异性能,Flask的每秒处理请求数为123次,平均处理时间1440.24秒,与Tornado性能相当。

Tornado的每秒处理请求数为143次,平均处理时间1344.69秒。对于数据库与模板的处理,Tornado与Flask不相上下。

本文原始标题为:Python的三大Web框架性能分析---来源是:

本文原始标题为:Python的三大Web框架性能分析---来源是:

结论

Django:Python界最全能的web开发框架,battery-include各种功能完备,可维护性和开发速度一级棒。常有人说Django慢,其实主要慢在DjangoORM与数据库的交互上,所以是否选用Django,取决于项目对数据库交互的要求以及各种优化。而对于Django的同步特性导致吞吐量小的问题,其实可以通过Celery等解决,倒不是一个根本问题。Django的项目代表:Instagram,Guardian。

Tornado:天生异步,性能强悍是Tornado的名片,然而Tornado相比Django是较为原始的框架,诸多内容需要自己去处理。当然,随着项目越来越大,框架能够提供的功能占比越来越小,更多的内容需要团队自己去实现,而大项目往往需要性能的保证,这时候Tornado就是比较好的选择。Tornado项目代表:知乎。

Flask:微框架的典范,号称Python代码写得最好的项目之一。Flask的灵活性,也是双刃剑:能用好Flask的,可以做成Pinterest,用不好就是灾难(显然对任何框架都是这样)。Flask虽然是微框架,但是也可以做成规模化的Flask。加上Flask可以自由选择自己的数据库交互组件(通常是Flask-SQLAlchemy),而且加上celery+redis等异步特性以后,Flask的性能相对Tornado也不逞多让,也许Flask的灵活性可能是某些团队更需要的。

本文原始标题为:Python的三大Web框架性能分析---来源是:

本文原始标题为:Python的三大Web框架性能分析---来源是:

总结:萝卜白菜各有所爱,然而机器的效率(程序的性能)与程序员的效率(可维护性、开发速度)是一对矛盾。选择什么样的架构组合,取决于产品的特性以及团队的能力。

本文原始标题为:Python的三大Web框架性能分析---来源是:

Python的三大Web框架性能分析

北京联盟声明:1、本文由热心网友投稿,文中所阐述的内容与观点,不代表“北京联盟”立场。2、本文由热心网友投稿,版权归原作者所有,如有版权争议,请联系我们删除。北京联盟不承担任何连带责任。3、凡注明来源为“北京联盟”的文章,均属本站原创,转载请注明出处。
推荐阅读