简说Python Web异步框架

举报
云享专家 发表于 2019/10/18 10:15:18 2019/10/18
【摘要】 Tornado是Python 2时代的明星,比起Django的笨重来它更轻巧,赢得了很多人的喜爱,也包括本人。多年前,开始接触Web开发就是从它开始的。到了Python 3 这个异步盛行的时代,Tornado 有些廉颇老矣。虽然它有异步支持,但是各种测试来看,都敌不过后起之秀的强劲。如果你现在想开始web开发,就不要用它了,去拥抱Sanic吧

时间过得真快,转眼之间已经是2019年了。好几年前,做web开发时,我们选择了Python的tornado框架,看重的是它的轻量级(简洁)和异步(说实话,没怎么用异步)。


后来,开始用Python 3,同时也接触了asyncio,对异步IO有了跟深入的理解和掌握。asyncio模块提供了在单线程上通过协程实现并发的基础框架,复用网络sockets和其它资源上的IO访问。简单说,就是在读写网络、文件等IO设备时通过并发来提高性能。


写爬虫也用asyncio替换了原来的gevent,最明显的感触就是,抓取速度没有多大变化但是系统资源消耗大大减少,那么同样的服务器就可以大大提高抓取效率了。


异步爬虫是在客户端应用异步IO,同样的,我们也可以在服务器端使用异步IO。今天,我们就聊聊Python众多的异步IO Web 框架。


著名的github上有个代码库:awesome-asyncio,大家集思广益整理了python asyncio 相关的库。当然,也有好心的国人翻译成了中文版: awesome-asyncio-cn。


我们先来看看其中关于Web框架部分,看看哪些著名的异步Web框架上榜了:

image.png


好家伙,数量还真不少,真是应了那句“Python就是出了名的库多”。下面,我挑几个比较熟悉的来介绍一下。


一、Sanic

Sanic是一个支持 async/await 语法的异步web框架,它的使用类似Flask,同时使用了基于libuv的事件循环库uvloop,使得它的性能大大提高。


为了写这篇文章特意其它的github主页看了一下,发现竟然改变了很多,有了自己的官网: https://sanicframework.org/ 。没错,它现在是一个开源社区了。并且有了新的logo:



Sanic建立了自己的社区,有了新的版本发布周期,开发活跃了起来,最近也是发布了好多版本,形势一片大好。希望Sanic撸起袖子干出来一个精品框架!

                                                  image.png


本来是想去找一下它很早之前做的一个性能对比测试,可是现在它拿掉了。因为,这个测试只是简单的“hello world”测试,一直被人诟病。不过,官方正在着手新的性能测试,今年年初应该有个结果。


好在github有历史记录,把这个性能对比再拿出来看一下,当时就是看到这个结果才上了Sanic的船,不过确实没选错,用下来感觉还是很棒的,Web就应该和异步IO搭配才完美。


image.png

从这个结果看,Sanic确实是很诱人的。当然,一个web网站不能是简单的“Hello Word”,更多的是后台逻辑处理、数据库读写等。


二、Tornado 框架

Tornado是Python 2时代的明星,比起Django的笨重来它更轻巧,赢得了很多人的喜爱,也包括本人。多年前,开始接触Web开发就是从它开始的。到了Python 3 这个异步盛行的时代,Tornado 有些廉颇老矣。虽然它有异步支持,但是各种测试来看,都敌不过后起之秀的强劲。如果你现在想开始web开发,就不要用它了,去拥抱Sanic吧。


三、Japronto! 框架

先看看这个对比结果惊讶一下下吧:


image.png


为什么秒杀所有框架,还包括Go语言的框架呢?其实,它底层都是C语言写的,基本上就是用Python给C语言套了个盒子,高性能都来自C语言。管它怎么实现的呢,用着爽就行了。可是,它还是一个早期开发版本,作者自己也不推荐大家用,并且还推荐大家去用Sanic。


这个框架值得关注。


四、Vibora 框架

这又是一个令人惊讶的框架,用cython(C语言)实现了很多底层的东西,所以速度也是杠杠的。虽然处于早期开发阶段,但是github上已经有四千多个星星了,令人不可小觑。


这一圈了解下来,Python的异步Web框架还处在一个群雄逐鹿的战国时代,还没有哪一个特别出彩。这个时候选择Sanic似乎应该不错。


github上有一个全面的web框架测试对比,有兴趣可以了解下:

https://github.com/the-benchmarker/web-frameworks


一个十年Python码奴与运营汪的结合体



作者:王平

十年专注于python web 开发,网络爬虫。深入理解Python语言,对Python特性深度了解.




【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。