时间过得真快,转眼之间已是2019年了。好几年前,作web开发时,咱们选择了Python的tornado框架,看重的是它的轻量级(简洁)和异步(说实话,没怎么用异步)。python
后来,开始用Python 3,同时也接触了asyncio,对异步IO有了跟深刻的理解和掌握。asyncio模块提供了在单线程上经过协程实现并发的基础框架,复用网络sockets和其它资源上的IO访问。简单说,就是在读写网络、文件等IO设备时经过并发来提升性能。git
写爬虫也用asyncio替换了原来的gevent,最明显的感触就是,抓取速度没有多大变化可是系统资源消耗大大减小,那么一样的服务器就能够大大提升抓取效率了。github
异步爬虫是在客户端应用异步IO,一样的,咱们也能够在服务器端使用异步IO。今天,咱们就聊聊Python众多的异步IO Web 框架。web
著名的github上有个代码库:awesome-asyncio,你们集思广益整理了python asyncio 相关的库。固然,也有好心的国人翻译成了中文版: awesome-asyncio-cn。数据库
咱们先来看看其中关于Web框架部分,看看哪些著名的异步Web框架上榜了:服务器
好家伙,数量还真很多,真是应了那句“Python就是出了名的库多”。下面,我挑几个比较熟悉的来介绍一下。网络
Sanic是一个支持 async/await 语法的异步web框架,它的使用相似Flask,同时使用了基于libuv的事件循环库uvloop,使得它的性能大大提升。并发
原本是想去找一下它很早以前作的一个性能对比测试,但是如今它拿掉了。由于,这个测试只是简单的“hello world”测试,一直被人诟病。不过,官方正在着手新的性能测试,今年年初应该有个结果。app
好在github有历史记录,把这个性能对比再拿出来看一下,当时就是看到这个结果才上了Sanic的船,不过确实没选错,用下来感受仍是很棒的,Web就应该和异步IO搭配才完美。框架
从这个结果看,Sanic确实是很诱人的。固然,一个web网站不能是简单的“Hello Word”,更多的是后台逻辑处理、数据库读写等。
Tornado是Python 2时代的明星,比起Django的笨重来它更轻巧,赢得了不少人的喜好,也包括本人。多年前,开始接触Web开发就是从它开始的。到了Python 3 这个异步盛行的时代,Tornado 有些廉颇老矣。虽然它有异步支持,可是各类测试来看,都敌不事后起之秀的强劲。若是你如今想开始web开发,就不要用它了,去拥抱Sanic吧。
先看看这个对比结果惊讶一下下吧:
为何秒杀全部框架,还包括Go语言的框架呢?其实,它底层都是C语言写的,基本上就是用Python给C语言套了个盒子,高性能都来自C语言。管它怎么实现的呢,用着爽就好了。但是,它仍是一个早期开发版本,做者本身也不推荐你们用,而且还推荐你们去用Sanic。
这个框架值得关注。
这又是一个使人惊讶的框架,用cython(C语言)实现了不少底层的东西,因此速度也是杠杠的。虽然处于早期开发阶段,可是github上已经有四千多个星星了,使人不可小觑。
这一圈了解下来,Python的异步Web框架还处在一个群雄逐鹿的战国时代,尚未哪个特别出彩。这个时候选择Sanic彷佛应该不错。