个性化阅读
专注于IT技术分析

适用于Python的5大异步Web框架

本文概述

异步编程现在是Python中的一等公民。如果你是网络开发人员, 则可以选择许多出色的框架!

在撰写本文时, 异步不再只是Python社区中的流行语。随着3.5版本asyncio库的发布, Python确认了Node.js对Web开发的影响, 并在该语言中引入了两个新的关键字-async和await。这非常重要, 因为除非有迫切的需求, 否则Python语言会非常谨慎地扩展核心语法, 这仅表明Python开发人员考虑异步功能的根本重要性。

结果, 打开了异步编程的闸门:新的和旧的库开始使用协程功能, 异步框架迅速流行, 并且今天仍在编写新的框架。并非闻所未闻的性能达到或优于Node.js, 并且除非你的加载模式涉及大量CPU繁重的任务, 否则没有理由你每秒不能发出数千个请求。

但是足够的动力!

让我们调查一下当前的Python格局, 并查看一些顶级的异步框架。

Tornado

令人惊讶的是, Tornado根本不是一个新框架。它的最初发布时间是2009年(就在撰写本文时正好是十年前), 从那时起, 它的重点一直是提供具有高并发性的坚如磐石的异步编程。

适用于Python的5大异步Web框架2

从根本上来说, Tornado不是一个网络框架。它是异步模块的集合, 也用于构建网络框架模块。更具体地说, 这些模块是:

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

这些已组合在一起以生成最终的框架模块:tornado.web, tornado.routing, tornado.template等。

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库仍在同步中), 因此它可能尚未成为主流。 )。

Sanic

Sanic实际上是一个”现代”框架:它不支持低于3.6的Python版本, 开箱即用地支持简单且通用的async / await语法, 因此不会使你阅读在编写第一个HTTP处理程序之前, 请先阅读大量文档, 并牢记重要案例。

适用于Python的5大异步Web框架4

结果, 产生的语法非常令人愉悦(至少在我看来)。它类似于你使用任何其他微框架(例如Flask, CherryPy)编写的代码, 但其中包含一些异步信息:

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, 版本控制, 蓝图, 基于类的视图, 静态文件, 流, 套接字等-以及开箱即用的功能可以添加模板, 数据库支持, 文件I / O, 队列, 因为到目前为止, 异步库已经足够用于这些。

Vibora

Vibora是Sanic的近亲, 除了致力于成为那里最快的Python Web服务器。实际上, 其网站的首次访问会给你带来框架比较:

适用于Python的5大异步Web框架6

如你所见, 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)

但是, 如果你是表演迷, Vibora可能会让你的船浮起。也就是说, 在撰写本文时, Vibora正在进行彻底的重写以使其变得更快, 并且与其性能版本的链接表示该文件处于”繁重的开发”中。对于那些提早使用Vibora并很快必须面对重大变化的人来说, 这将是一个令人失望的事情, 但是, 嘿, 这是Python异步世界中的早期, 没有人期望事情会稳定下来。

Quart

如果你喜欢在Flask中进行开发, 但是对缺乏异步支持感到遗憾, 那么你会非常喜欢Quart。

适用于Python的5大异步Web框架8

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()

感觉(几乎)完全像烧瓶一样, 不是吗?

由于Quart是Flask的演进, 因此Flask内的所有功能均可用:路由, 中间件, 会话, 模板, 蓝图等。实际上, 你甚至可以直接在Quart内部使用Flask扩展。有一个收获是仅支持Python 3.7+, 但是, 如果你未运行最新版本的Python, 则异步不是正确的方法。 ????

如果你没有Flask的较早经验, 那么文档确实很想要, 但是我可以推荐Quart, 因为Quart可能是即将推出其1.0版本的唯一异步框架。

FastAPI

此列表中的最后一个(但最令人印象深刻的)框架是FastAPI。不, 它不是仅API的框架;实际上, FastAPI似乎是我在研究异步Python框架时遇到的功能最丰富, 文档最丰富的框架。

适用于Python的5大异步Web框架10

有趣的是, 该框架的作者深入研究了其他几个框架, 从诸如Django之类的现代框架到诸如Sanic之类的现代框架, 以及将技术跨入NestJS(Node.js, Typescript网络框架)。他们的发展理念和广泛的比较可以在这里阅读。

语法非常令人愉快。甚至可以说它比我们遇到的其他框架更有趣:

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文档:一旦编写了端点, 就可以使用符合标准的UI来使用API​​。支持SwaggerUI, ReDoc等。

适用于Python的5大异步Web框架12

该框架还使用JSON Schema进行自动数据模型文档编制。

现代发展:是的, “现代”一词经常出现, 但我发现FastAPI确实可以说服他们。依赖注入和类型提示是一流的公民, 不仅要执行良好的编码原则, 而且从长远来看可以防止错误和混乱。

大量的文档:我不了解你, 但是我完全可以作为一份很好的文档。在这一方面, FastAPI赢得了广泛的应用。它的文档一页一页地解释几乎每一个细微之处, 并”当心!”各级开发人员的时刻。在这里的文档中, 我感觉到了明显的”灵魂和灵魂”, 而我唯一能找到的比较就是Django文档(是的, FastAPI文档是如此出色!)。

超越基本知识:FastAPI除了支持所有传统帮助程序(如CORS, 会话, Cookie等)之外, 还支持WebSockets, Streaming和GraphQL。

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

总结

如今, Python异步环境正在发生很多事情。弹出新框架, 重写旧框架, 并开发库以匹配异步行为。尽管Python内置了对事件循环的支持, 并且可以使应用程序的某些部分异步, 但你可以选择全力以赴并在此处的一种框架上构建。只要确保牢记长远考虑:几个Python异步框架都处于早期阶段, 并且正在迅速发展, 这将损害你的开发过程并增加业务成本。注意是关键!

但是所有人都说了就做。对于Web框架, Python已准备就绪, 可提供出色的性能。如果你已经考虑迁移很久了, 那么现在就不需要迁移了! ????

听起来不错?今天掌握Python!

赞(0)
未经允许不得转载:srcmini » 适用于Python的5大异步Web框架

评论 抢沙发

评论前必须登录!