本文概述
- Tornado
- Sanic
- Vibora
- Quart
- FastAPI
在撰写本文时, 异步不再只是Python社区中的流行语。随着3.5版本asyncio库的发布, Python确认了Node.js对Web开发的影响, 并在该语言中引入了两个新的关键字-async和await。这非常重要, 因为除非有迫切的需求, 否则Python语言会非常谨慎地扩展核心语法, 这仅表明Python开发人员考虑异步功能的根本重要性。
结果, 打开了异步编程的闸门:新的和旧的库开始使用协程功能, 异步框架迅速流行, 并且今天仍在编写新的框架。并非闻所未闻的性能达到或优于Node.js, 并且除非你的加载模式涉及大量CPU繁重的任务, 否则没有理由你每秒不能发出数千个请求。
但是足够的动力!
让我们调查一下当前的Python格局, 并查看一些顶级的异步框架。
Tornado 令人惊讶的是, Tornado根本不是一个新框架。它的最初发布时间是2009年(就在撰写本文时正好是十年前), 从那时起, 它的重点一直是提供具有高并发性的坚如磐石的异步编程。
文章图片
从根本上来说, Tornado不是一个网络框架。它是异步模块的集合, 也用于构建网络框架模块。更具体地说, 这些模块是:
- 协程和其他原语(tornado.gen, tornado.locks, tornado.queues等)
- 网络模块(tornado.ioloop, tornado.iostream等)
- 异步服务器和客户端(tornado.httpserver, tornado.httpclient等)
import tornado.ioloop
import tornado.webclass 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()
【适用于Python的5大异步Web框架】Tornado在Python社区中拥有强大而坚定的追随者, 并且经验丰富的架构师使用它们来构建高性能的系统。这个框架长期以来一直在解决并发问题, 但是由于它不支持WSGI标准并且买入太多(也许要记住, 大多数Python库仍在同步中), 因此它可能尚未成为主流。 )。
Sanic Sanic实际上是一个” 现代” 框架:它不支持低于3.6的Python版本, 开箱即用地支持简单且通用的async / await语法, 因此不会使你阅读在编写第一个HTTP处理程序之前, 请先阅读大量文档, 并牢记重要案例。
文章图片
结果, 产生的语法非常令人愉悦(至少在我看来)。它类似于你使用任何其他微框架(例如Flask, CherryPy)编写的代码, 但其中包含一些异步信息:
from sanic import Sanic
from sanic.response import jsonapp = 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, 版本控制, 蓝图, 基于类的视图, 静态文件, 流, 套接字等-以及开箱即用的功能可以添加模板, 数据库支持, 文件I / O, 队列, 因为到目前为止, 异步库已经足够用于这些。
Vibora Vibora是Sanic的近亲, 除了致力于成为那里最快的Python Web服务器。实际上, 其网站的首次访问会给你带来框架比较:
文章图片
如你所见, Vibora声称比传统框架快几倍, 是最接近竞争对手Sanic的两倍多。当然, 基准应该是一粒盐。 ????
尽管在语法和功能上, Vibora可以与Sanic媲美(或者甚至更好一点, 因为它捆绑了流行的库, 并且像开箱一样提供了模板等功能), 但我认为Sanic更加成熟, 因为它已经存在了很长的时间并且更大的社区。
from vibora import Vibora, JsonResponseapp = Vibora()@app.route('/')
async def home():
return JsonResponse({'hello': 'world'})if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)
但是, 如果你是表演迷, Vibora可能会让你的船浮起。也就是说, 在撰写本文时, Vibora正在进行彻底的重写以使其变得更快, 并且与其性能版本的链接表示该文件处于” 繁重的开发” 中。对于那些提早使用Vibora并很快必须面对重大变化的人来说, 这将是一个令人失望的事情, 但是, 嘿, 这是Python异步世界中的早期, 没有人期望事情会稳定下来。
Quart 如果你喜欢在Flask中进行开发, 但是对缺乏异步支持感到遗憾, 那么你会非常喜欢Quart。
文章图片
Quart符合ASGI标准, 该标准是著名的WSGI标准的后继产品, 并提供异步支持。 Quart有趣的是, 它不仅与Flask相似, 而且实际上与Flask API兼容!该框架的作者希望保留Flask的感觉, 并仅向其添加异步, WebSocket和HTTP 2支持。结果, 你可以从Flask文档中正确学习Quart, 只需记住Quart中的函数是异步的。
from quart import Quartapp = Quart(__name__)@app.route('/')
async def hello():
return 'hello'app.run()
感觉(几乎)完全像烧瓶一样, 不是吗?
由于Quart是Flask的演进, 因此Flask内的所有功能均可用:路由, 中间件, 会话, 模板, 蓝图等。实际上, 你甚至可以直接在Quart内部使用Flask扩展。有一个收获是仅支持Python 3.7+, 但是, 如果你未运行最新版本的Python, 则异步不是正确的方法。 ????
如果你没有Flask的较早经验, 那么文档确实很想要, 但是我可以推荐Quart, 因为Quart可能是即将推出其1.0版本的唯一异步框架。
FastAPI 此列表中的最后一个(但最令人印象深刻的)框架是FastAPI。不, 它不是仅API的框架;实际上, FastAPI似乎是我在研究异步Python框架时遇到的功能最丰富, 文档最丰富的框架。
文章图片
有趣的是, 该框架的作者深入研究了其他几个框架, 从诸如Django之类的现代框架到诸如Sanic之类的现代框架, 以及将技术跨入NestJS(Node.js, Typescript网络框架)。他们的发展理念和广泛的比较可以在这里阅读。
语法非常令人愉快。甚至可以说它比我们遇到的其他框架更有趣:
rom fastapi import FastAPIapp = 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文档:一旦编写了端点, 就可以使用符合标准的UI来使用API??。支持SwaggerUI, ReDoc等。
文章图片
该框架还使用JSON Schema进行自动数据模型文档编制。
现代发展:是的, “ 现代” 一词经常出现, 但我发现FastAPI确实可以说服他们。依赖注入和类型提示是一流的公民, 不仅要执行良好的编码原则, 而且从长远来看可以防止错误和混乱。
大量的文档:我不了解你, 但是我完全可以作为一份很好的文档。在这一方面, FastAPI赢得了广泛的应用。它的文档一页一页地解释几乎每一个细微之处, 并” 当心!” 各级开发人员的时刻。在这里的文档中, 我感觉到了明显的” 灵魂和灵魂” , 而我唯一能找到的比较就是Django文档(是的, FastAPI文档是如此出色!)。
超越基本知识:FastAPI除了支持所有传统帮助程序(如CORS, 会话, Cookie等)之外, 还支持WebSockets, Streaming和GraphQL。
那性能呢?好吧, FastAPI是基于令人惊叹的Starlette库构建的, 其性能可与Node相匹配, 在某些情况下甚至可与Go!相匹配。总而言之, 我真的有一种感觉, FastAPI将成为Python的顶级异步框架。
总结
如今, Python异步环境正在发生很多事情。弹出新框架, 重写旧框架, 并开发库以匹配异步行为。尽管Python内置了对事件循环的支持, 并且可以使应用程序的某些部分异步, 但你可以选择全力以赴并在此处的一种框架上构建。只要确保牢记长远考虑:几个Python异步框架都处于早期阶段, 并且正在迅速发展, 这将损害你的开发过程并增加业务成本。注意是关键!
但是所有人都说了就做。对于Web框架, Python已准备就绪, 可提供出色的性能。如果你已经考虑迁移很久了, 那么现在就不需要迁移了! ????
听起来不错?今天掌握Python!
推荐阅读
- appium启动APP时避免重新安装的问题
- 9种流行的基于云的Web抓取解决方案
- 后端开发人员必备的前6个队列系统
- 4种流行的机器人流程自动化(RPA)工具
- 如何在本地开发环境中实现可信SSL证书()
- 11个开源物联网(IoT)平台和工具
- 事件循环(Event Loop)在JavaScript中是如何工作的()
- 开源101(版本控制系统和Git)
- 如何创建你的第一个Jenkins管道()