• Python 异步 ASGI 服务器及框架


    ASGI

    在 Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者投入异步的怀抱。

    直到最近,Python 仍缺乏用于 asyncio 框架的最低限度的低级服务器/应用程序接口。

    而 ASGI 协议规范的出现填补了这一空白,这意味着我们现在能够开始构建可在所有异步框架中使用的通用工具集

    ASGI(异步服务器网关接口)是WSGI的精神继承者,旨在在具有异步功能的Python Web服务器,框架和应用程序之间提供标准接口。

    有关同步生态中的服务器及 WSGI 请查看文末推荐的以前写的相关文章

    ASGI 服务器

    Uvicorn

    Uvicorn 是一个快速的 ASGI 服务器,Uvicorn 是基于 uvloop 和 httptools 构建的,是 Python 异步生态中重要的一员。

    Uvicorn 当前支持 HTTP / 1.1 和 WebSockets,将来计划支持HTTP / 2。

    版本要求 Python 3.5 以上,Uvicorn 的安装,

    pip install uvicorn

    我们可以自己编写一个异步的服务,同时使用 uvicorn 来运行,比如新建一个 demo.py,里面代码如下:

    async def app(scope, receive, send):
        assert scope['type'] == 'http'
        await send({
            'type': 'http.response.start',
            'status': 200,
            'headers': [
                [b'content-type', b'text/plain'],
            ]
        })
        await send({
            'type': 'http.response.body',
            'body': b'Hello, world!',
        })

    运行命令如下,

    uvicorn demo:app

    服务启动之后,我们通过浏览器就能方位该服务,默认端口 8000

    Daphne

    Daphne 服务器是最早为 Django Channels 提供支持的 ASGI 服务器

    Daphne 它在生产中广泛运行,并支持HTTP / 1.1,HTTP / 2和 WebSockets。

    安装和运行的命令如下:

    pip install daphne
    daphne app:App
    

    和 uvicorn 命令类似,app 是文件名称,APP 是应用程序

    Hypercorn

    Hypercorn 最初是框架 Quart 的一部分,然后被分离为独立的 ASGI 服务器

    同样的,Hypercorn 支持 HTTP/1.1, HTTP/2, 以及 WebSockets.

    安装和运行的命令如下:

    pip install hypercorn
    hypercorn app:App
    

    说了 ASGI 服务器,接下来就是支持 ASGI 的框架了

    ASGI 框架

    您可以使用 Uvicorn,Daphne 或 Hypercorn 运行任何 ASGI 框架

    对于小型服务,您也可以直接编写 ASGI 应用程序。例如之前编写的异步框架。

    Python 中有以下几个支持 ASGI 的异步框架

    Starlette

    Starlette 是一个轻量级的 ASGI 框架/工具包。它是构建高性能异步服务的理想选择,并且支持 HTTP 和 WebSockets。

    Django Channels

    ASGI 规范最初是设计就是用于 Django Channels 的。

    Channels 与其他ASGI框架略有不同,它在线程框架后端上提供了异步前端。

    同时 Django Channels 支持 WebSocket,后台任务和长期运行的连接,而应用程序代码仍在标准线程上下文中运行

    Quart

    Quart 是一个类似于 Flask 的 ASGI Web 框架。Quart 不仅与 Flask 相似,而且与 Flask API 兼容!

    该框架的作者希望保留了Flask 的风格,只是向其中添加异步、WebSocket 和 HTTP 2支持。

    因此,你可以从 Flask 文档中学习 Quart 的用法,只需要记住 Quart 中的函数是异步的就行。

    一个简单的 Quart 服务:

    from quart import Quart
    
    app = Quart(__name__)
    
    @app.route('/')
    async def hello():    
        return 'hello'app.run()
    

    和 Flask 是不是很像,只是多了一个异步 async

    由于 Quart 是从 Flask 中演进过来的,因此 Flask 的所有功能均可用:路由,中间件,会话,模板,蓝图等

    FastAPI

    FastAPI 是一个基于 Starlette 和 Pydantic 的 API 框架,其灵感来自以前的 APISta 服务器版本

    您可以使用 Python 3.6+ 类型声明编写 API 函数参数,并获得自动数据转换,数据验证。

    FastApi 最主要的特点是快,非常高的性能,向 NodeJS 和 Go 看齐,现有最快的Python框架之一

    同时它可以自动生成交互式 API 文档 UI,编写 API 接口后,你就可以使用符合标准的 UI 如 SwaggerUI,ReDoc 等来使用 API。

    swagger-ui

    作者:华为云特约供稿开发者  Python编程与实战

  • 相关阅读:
    JAVA查询树结构数据(省市区)使用hutool工具实现
    定时器
    工作队列
    中断类型
    通过风扇FG脚检测风扇转速
    共享中断
    Linux中断信号的查看
    使用Alibaba Cloud Linux 2系统开突发型实例遇到宿主机一直超分案例
    React学习(三)----- 组件的生命周期
    React学习(二)----- 面向组件编程
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13164861.html
Copyright © 2020-2023  润新知