简说Python Web异步框架
时间过得真快,转眼之间已经是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框架上榜了:
好家伙,数量还真不少,真是应了那句“Python就是出了名的库多”。下面,我挑几个比较熟悉的来介绍一下。
一、Sanic
Sanic是一个支持 async/await 语法的异步web框架,它的使用类似Flask,同时使用了基于libuv的事件循环库uvloop,使得它的性能大大提高。
为了写这篇文章特意其它的github主页看了一下,发现竟然改变了很多,有了自己的官网: https://sanicframework.org/ 。没错,它现在是一个开源社区了。并且有了新的logo:
Sanic建立了自己的社区,有了新的版本发布周期,开发活跃了起来,最近也是发布了好多版本,形势一片大好。希望Sanic撸起袖子干出来一个精品框架!
本来是想去找一下它很早之前做的一个性能对比测试,可是现在它拿掉了。因为,这个测试只是简单的“hello world”测试,一直被人诟病。不过,官方正在着手新的性能测试,今年年初应该有个结果。
好在github有历史记录,把这个性能对比再拿出来看一下,当时就是看到这个结果才上了Sanic的船,不过确实没选错,用下来感觉还是很棒的,Web就应该和异步IO搭配才完美。
从这个结果看,Sanic确实是很诱人的。当然,一个web网站不能是简单的“Hello Word”,更多的是后台逻辑处理、数据库读写等。
二、Tornado 框架
Tornado是Python 2时代的明星,比起Django的笨重来它更轻巧,赢得了很多人的喜爱,也包括本人。多年前,开始接触Web开发就是从它开始的。到了Python 3 这个异步盛行的时代,Tornado 有些廉颇老矣。虽然它有异步支持,但是各种测试来看,都敌不过后起之秀的强劲。如果你现在想开始web开发,就不要用它了,去拥抱Sanic吧。
三、Japronto! 框架
先看看这个对比结果惊讶一下下吧:
为什么秒杀所有框架,还包括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特性深度了解.
- 点赞
- 收藏
- 关注作者
评论(0)