关于Python框架的那些事!(常用Python框架,区别,性能对比)

共 5260字,需浏览 11分钟

 ·

2021-07-11 02:54


学了Python还不知道Python有哪些常用框架的,要么你是超级大神喜欢原生手写,要么就是小小白刚开始学习Python。

无论你是大神也好小白也罢,了解几款Python常用框架是绝对有必要的,否则真不好意思跟别人说学过Python😁😁。下面再次为大家介绍几款Python常用框架以及它们的区别与性能对比。

目前比较流行的大家常用的Python框架一般是DjangoFlaskScrapyCubesPulsarTornado。下面我们一起来看看这些Python框架的不同适用环境。

Django:Python全能型Web框架


https://www.djangoproject.com/


谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。它与其他框架最大的区别就是,鲜明独特的特性,支持orm,将数据库的操作封装成为Python,对于需要适用多种数据库的应用来说是个比较好的特性。

Flask:轻量级Web应用微框架


https://palletsprojects.com/p/flask/


相信大家都知道Flask是一个用Python编写的轻量级Web应用框架。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。基于他的这个特性使用者可以花很少的成本就能够开发一个简单的网站。因此,从这个角度来讲,Flask框架非常适合初学者学习。Flask框架学会以后,我们还可以考虑学习插件的使用。

Scrapy:Python的爬虫框架


https://scrapy.org/


Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。现在Python爬虫技术被看做是职场人的加分技能,因此掌握Scrapy还是十分有必要的。Scrapy是一个轻量级的使用Python编写的网络爬虫框架,这也是它与其他Python框架最大的区别。因为专门用于爬取网站和获取结构数据且使用起来非常的方便,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试等等。


Cubes:轻量级Python OLAP 数据分析框架

http://cubes.databrewery.org/


Cubes作为一个轻量级Python OLAP 数据分析框架,包含了OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。它是Data Brewery的一部分,用于开发报告和数据分析应用程序。

Pulsar:Python的事件驱动并发框架

https://pypi.org/project/pulsar/


Pulsar是Python的事件驱动并发框架。有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。

Tornado:传说中高性能异步非阻塞IO的Python Web框架


https://www.tornadoweb.org/en/stable/


Tornado全称是Torado Web Server,仅仅从它的名字上我们就可以知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。Tornado和现在的主流 Web 服务器框架和大多数Python框架有着明显的区别,它是非阻塞式服务器,而且速度相当快。而其他框架不支持异步处理。它也是比较常被使用的Python开源框架之一。当框架能够提供的功能占比越来越小,需要实现更多的内容的时候,Tornado就是比较好的选择了。

Web2py:全栈式Web框架

http://www.web2py.com/


web2py 是一个为 Python 语言提供的全功能Web应用框架,旨在敏捷快速的开发 Web 应用,具有快速、安全以及可移植的数据库驱动的应用,可以被开发人员用来完全开发一个web应用程序。它包括SQL数据库集成和用于设计程序的多线程Web服务器。兼容 Google App Engine。

webpy: 轻量级的Python Web框架


https://webpy.org/


webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。两个不同的框架,Web2py与webpy没有任何关系,webpy也就是web.py相对简约一些。

Falcon:构建云API和网络应用后端的高性能Python框架

https://falcon.readthedocs.io/en/stable/


Falcon是一个构建云API的高性能的Python web框架,用于构建大规模的应用程序后端和微服务。它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。

Buildbot:基于Python的持续集成测试框架


https://buildbot.net/


Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。

Sanic :一个类似Flask的基于Python3.5+的web框架


https://sanic.readthedocs.io/en/stable/


Sanic 既是一个Python web 服务器,又是一个web框架,它为速度而生。Sanic只支持Python 3.5及其以上版本,它的写入速度非常快。除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码。

Vibora:旨在成为最快的Python web框架


https://vibora.io/


Vibora代表葡萄牙语的viper,它是一个异步的客户端/服务器框架,要成为最快的Python HTTP客户端/服务器框架,支持Python 3.6+以上版本!该框架效率高,性能好。它的API灵感来自Flask,而其内置功能基于众多著名的库,如jinja2,marshmallow,aaugustin的websockets,werkzeug等等。

Python框架之间的区别还是很大的,如果是入门建议选择Flask,而重量级框架首选Django。至于其他的框架都很好用,主要看大家的应用场景对Python框架有哪些具体的要求。

Python Web框架:Django、Flask与Tornado的性能对比

本文主要使用目前最常用的三大 Python 框架:Django、 Flask 以及 Tornado作为测试框架,以一次 http 请求到收到响应需要多少时间为测试内容

主要比较三点:

  • JSON:序列化一个对象,并返回一个 json。
  • 远程性能:从远程服务器上返回 http response 的时间
  • 数据库性能:使用 ORM(对象关系映射)从数据库获取数据,并渲染到模板上的时间

json 测试:Django 与 Flask 占优

单纯在本地测试 json 的序列化,Django 完成一次 json 序列化的平均时间 42.52 毫秒,每秒请求量 4762 次。Flask 在此项测试中,与 Django 的比较不相上下,Flask 平均时间 43.33 毫秒,每秒请求量 4630 次。Tornado 完成 json 序列化的平均时间高达 77.51 毫秒,是所有框架中耗时最长的,每秒请求数是 2578 次,也是低于 Django 与 Flask 的水准。这仅仅说明框架在本地处理 json 的速度。框架还涉及 http request/response 以及数据库的读写,后面还需要综合来分析框架的性能。

处理远程 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 的模式,由此带上了异步处理的能力。

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

Django 饱受诟病的地方就是 Django ORM 确实很慢,加上模板处理时间,Django 的平均时间 2904.04 毫秒,每秒处理请求量 42.9 次。然而 Django 的大部分功能是建立在其 Django ORM 基础上,比如 models, admin, forms 甚至第三方框架 django-rest-framework。Django 的开发效率与维护非常棒,然而 Django ORM 深度绑定了该框架,如果你需要把 Django ORM 换成其它轮子,那么也意味着 Django 的诸多优秀特性将从此告别。

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

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

测试结论

Django:Python 界最全能的 web 开发框架,battery-include 各种功能完备,可维护性和开发速度一级棒。常有人说 Django 慢,其实主要慢在 Django ORM 与数据库的交互上,所以是否选用 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 的灵活性可能是某些团队更需要的。

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


往期推荐


1、好可怕的搜索引擎!

2、再见,APK, 你好,AAB !

3、什么?VS Code 里面还能找女朋友?

4、国内大神成功给手机装上了Win11,支持一加、小米

5、微软:不是所有电脑都能升级Win11,网友:看我偷梁换柱


今天因为您的点赞和在看,让我元气满满!


浏览 122
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报