python 5个顶级异步框架推荐


Posted in Python onSeptember 09, 2020

Python在3.4引入了 asyncio 库,3.6新增了关键字 async和await,此后,异步框架迅速发展了起来,性能上能和Node.js比肩,除非是CPU密集型任务,否则没有理由不适用异步框架。

如果你是Web开发者,现在异步Web框架上有了更多选择!

1、Tornado

Tornado 根本不是什么新框架,它最初是由FriendFeed(后被Facebook收购)在2009年发布。从一开始就提供有异步编程的功能。

python 5个顶级异步框架推荐

Tornado 不仅仅是Web框架,同时它内置了很多异步模块,可用于自己构建异步应用。这些模块包括:

  • 协同程序和其他原语(tornado.gen,tornado.locks,tornado.queues等)
  • 网络模块(tornado.ioloop,tornado.iostream等)
  • 异步服务器和客户端(tornado.httpserver,tornado.httpclient,等)

通过这些模块,Tornado 构建了自己的异步Web框架模块。

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    self.write("Hello, world")

def make_app():
  return tornado.web.Application([
    (r"/", MainHandler),
  ])

if __name__ == "__main__":
  app = make_app()
  app.listen(8888)
  tornado.ioloop.IOLoop.current().start()

Tornado在Python社区中拥有很多追随者,并且经验丰富的架构师使用它们来构建功能强大的系统。这个框架长期以来一直在解决并发问题,但是由于它不支持WSGI标准(大部分Python库仍在同步中),因此尚未成为主流。

国内据说知乎是基于Torando构建的。

2、 Snaic

Sanic是一个诞生有3年的框架:它只支持3.6以上Python版本,支持通用的async / await语法,开箱即用,因此你无需阅读大量文档就可以写出你的一个HTTP 处理器。

python 5个顶级异步框架推荐

除了async关键字之外,语法上和 flask 基于没差别。

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route("/")
async def test(request):
  return json({"hello": "world"})

if __name__ == "__main__":
  app.run(host="0.0.0.0", port=8000)

Sanic可以说是Python世界中最流行和最受欢迎的异步框架。它具有你项目中需要的所有功能:路由,中间件,Cookie,版本控制,蓝图,基于类的视图,静态文件,流,sockets,此外你还可以集成模板,数据库驱动,文件I / O,队列等等。

3、Vibora

Vibora和Sanic非常像,致力于成为最快的Python Web服务器。他们网站首页有一个框架比较图:

python 5个顶级异步框架推荐

Vibora声称比其它框架快几倍,比竞争对手Sanic还快两倍多。当然,这个基准测试要持怀疑态度。

尽管在语法和功能上,Vibora可以与Sanic媲美但我认为Sanic更加成熟,因为它已经存在了很长一段时间并且具有更大的社区。

from vibora import Vibora, JsonResponse

app = Vibora()

@app.route('/')
async def home():
  return JsonResponse({'hello': 'world'})

if __name__ == '__main__':
  app.run(host="0.0.0.0", port=8000)

4、Quart

如果您喜欢Flask,但又要支持异步, 那么Quart你一定会喜欢

python 5个顶级异步框架推荐

Quart符合ASGI标准,该标准是WSGI标准的后继产品,并提供异步支持。Quart不仅与Flask相似,而且与Flask API兼容!该框架的作者希望保留了Flask的风格,只是向其中添加异步、WebSocket和HTTP 2支持。因此,你可以从Flask文档中学习Quart的用法,只需要记住Quart中的函数是异步的就行。

from quart import Quart

app = Quart(__name__)

@app.route('/')
async def hello():
  return 'hello'

app.run()

几乎完全像Flask

由于Quart是从Flask中演进过来的,因此Flask的所有功能均可用:路由,中间件,会话,模板,蓝图等。实际上,你甚至可以直接在Quart内部使用Flask的扩展插件。不过,有一个问题是它仅支持Python 3.7+。

5、FastAPI

FastAPI似乎是异步 Python 框架里功能、文档最丰富的框架。

python 5个顶级异步框架推荐

该框架的作者深入研究了其他几个框架,从诸如Django到Sanic之类的现代框架,以及NestJS(Node.js,Typescript Web框架)。

语法甚至可以说它比我们遇到的其他框架更有趣:

rom fastapi import FastAPI

app = FastAPI()

@app.get("/users/me")
async def read_user_me():
  return {"user_id": "the current user"}

@app.get("/users/{user_id}")
async def read_user(user_id: str):
  return {"user_id": user_id}

FastAPI胜过其他框架的杀手锏列表:

自动生成API文档:编写API接口后,你就可以使用符合标准的UI如SwaggerUI,ReDoc等来使用API​​。

python 5个顶级异步框架推荐

那性能呢?FastAPI是基于Starlette库构建的,其性能可与Node相匹配,在某些情况下甚至可以与Go相匹配。总而言之,我真的有一种感觉,FastAPI将成为Python的顶级异步框架。

总结

如今,Python异步生态正在发生很多事情。出现了新的框架,旧的框架正在重写,很多库开始支持异步行为。对于Web框架,Python已准备就绪,可提供出色的性能。如果很长一段时间你在考虑迁移到Node或者go,那现在不需要了。

原文参考连接:https://geekflare.com/python-asynchronous-web-frameworks/

以上就是python 5个顶级异步框架推荐的详细内容,更多关于python 异步框架的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之编写类之三子类
Oct 11 Python
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
django允许外部访问的实例讲解
May 14 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
python爬取内容存入Excel实例
Feb 20 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
利用Python复制文件的9种方法总结
Sep 02 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
基于python爬取有道翻译过程图解
Mar 31 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
为什么python比较流行
Jun 19 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 #Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 #Python
详解python内置模块urllib
Sep 09 #Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 #Python
python 爬取B站原视频的实例代码
Sep 09 #Python
利用Python实现Json序列化库的方法步骤
Sep 09 #Python
python之语音识别speech模块
Sep 09 #Python
You might like
php自动适应范围的分页代码
2008/08/05 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
php的socket编程详解
2016/11/20 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python中__init__.py文件的作用详解
2016/09/18 Python
Python多继承顺序实例分析
2018/05/26 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Python 打印中文字符的三种方法
2018/08/14 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python实现数据分析与建模
2019/07/11 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
道路建设实施方案
2014/03/18 职场文书
欢迎领导检查标语
2014/06/27 职场文书
志愿者事迹材料
2014/12/26 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
Python pandas之求和运算和非空值个数统计
2021/08/07 Python