一文教你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,使得它的性能大大提高。

本来是想去找一下它很早之前做的一个性能对比测试,可是现在它拿掉了。因为,这个测试只是简单的“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似乎应该不错。

原文地址:https://www.cnblogs.com/l520/p/10283029.html

时间: 2024-10-10 21:03:24

一文教你Python Web异步框架的相关文章

Python -- Web -- 使用框架

Python的web框架有很多: Flask,Django,Zope2,Web.py,Web2py,Pyramid,Bottle, Tornado... Flask 轻量级,比较简单 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()

python web简易框架体验

———————— ————data #保存class类及类中的对象 ————int #执行程序 ———————————— #@Time:2020/2/4 16:48 #@Author :jok #@file :data.py #@software:PyCharm class web: def home(self): return "首页" def list(self): return "列表" def a_404(self): return "404&qu

异步非阻塞IO的Python Web框架--Tornado

Tornado的全称是Torado Web Server,从名字上就可知它可用作Web服务器,但同时它也是一个Python Web的开发框架.最初是在FriendFeed公司的网站上使用,FaceBook收购之后便进行了开源. 作为Web框架,是一个轻量级的Web框架,类似于另一个Python web 框架Web.py,其拥有异步非阻塞IO的处理方式. 作为Web服务器,Tornado有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它Python web应用框架进行对

python web server gateway interface (wsgi ) notes

前言: 注:如果需要得到支持批Python3.x以及包含了勘误表,附录,和说明的更新版规范,请查看PEP 3333 摘要: 这篇文档详细说明了一套在web服务器与Python web应用程序(web框架)之间的已提出的标准接口,从而方便web应用在各种web服务器之间的移植. 理论和目标 Python世界目前拥有各种各样的web应用框架,仅举几例比如 Zope, Quixote, Webware, SkunkWeb, PSO, and Twisted Web 等[1],对于新手来说面对如此多的选

Python Web框架Tornado的异步处理代码示例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合,

Python Web框架Tornado的异步处理代码演示样例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但能够提供主要的web server功能.故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合

Python web 框架 Sanci如何使用?

本文和大家分享的主要是python web 框架 Sanci 相关内容,一起来看看吧,希望对大家学习python有所帮助. Sanic 是一个和类Flask 的基于Python3.5+的web框架,它编写的代码速度特别快. 除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求.这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码. 既然它说速度特别快,我们先看下官方提供的 基准测试结果. Sanic基准测试 这个测试的程序运行在 AWS 实例上,系统是Ubu

Python 开源异步并发框架的未来(转)

Python 开源异步并发框架的未来 fantix 1.1k 2014年04月16日 发布 推荐 4 推荐 收藏 31 收藏,8.9k 浏览 呵呵,这个标题有点大,其实只是想从零开始介绍一下异步的基础,以及 Python 开源异步并发框架的发展和互操作性. 另外,这是我在 OSTC 2014 做的一个 20140330-OSTC-分论坛1王川 http://v.youku.com/v_show/id_XNjk2ODI0ODQ4.html ,幻灯片在这里,欢迎拍砖. 开源 Python 是开源的,

Python 开源异步并发框架的未来

http://segmentfault.com/a/1190000000471602 开源 Python 是开源的,介绍的这几个框架 Twisted.Tornado.Gevent 和 tulip 也都是开源的,最后这个演讲是在开源大会弄的,所以标题里肯定少不了开源.另外,我的 gevent3 项目也是开源的——貌似不少同学被我起的极品名字给搞混了,特别说明一下,gevent3 虽然有跟 Gevent 一样的接口外貌,但底层却是 tulip 驱动的(考虑把名字改回 gulip 之类的):请区别于将