一文教你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 Web异步框架

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

一、Sanic

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

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

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

一文教你Python Web异步框架

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

二、Tornado 框架

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

三、Japronto! 框架

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

一文教你Python Web异步框架

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

这个框架值得关注。

四、Vibora 框架

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

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

上一篇:生成马赛克图片并且在对应的标签中添加mask区域,用于二值图训练


下一篇:KNN/K近邻/K-nearest neighbor 算法