Python 异步 ASGI 服务器及框架

简介: Python 异步 ASGI 服务器及框架

640.jpg

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,里面代码如下:

asyncdef 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('/')
asyncdef hello():
    return'hello'app.run()

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

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

FastAPI

640.png

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

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

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

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


swagger-ui

640.png

相关文章
|
2天前
|
JSON 测试技术 数据库
Python的Flask框架
Python的Flask框架
|
10天前
|
安全 Python
使用Python实现简单的Web服务器
使用Python实现简单的Web服务器
19 6
|
15天前
|
JSON 测试技术 数据库
Python的Flask框架
Python的Flask框架
|
17天前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
42 5
|
18天前
|
机器学习/深度学习 PyTorch 算法框架/工具
python这些库和框架哪个更好
【9月更文挑战第2天】python这些库和框架哪个更好
32 6
|
18天前
|
机器学习/深度学习 数据采集 算法框架/工具
python有哪些常用的库和框架
【9月更文挑战第2天】python有哪些常用的库和框架
21 6
|
20天前
|
测试技术 API 开发者
Python 魔法:打造你的第一个天气查询小工具自动化测试框架的构建与实践
【8月更文挑战第31天】在这篇文章中,我们将一起踏上编程的奇妙旅程。想象一下,只需几行代码,就能让计算机告诉你明天是否要带伞。是的,你没有听错,我们将用Python这把钥匙,解锁天气预报的秘密。不论你是编程新手还是想拓展技能的老手,这篇文章都会为你带来新的视角和灵感。所以,拿起你的键盘,让我们一起创造属于自己的天气小工具吧!
|
20天前
|
运维 监控 数据库
自动化运维:使用Python脚本实现服务器监控
【8月更文挑战第31天】在这篇文章中,我们将探索如何利用Python编写简单的脚本来实现对服务器的基本监控。通过学习和应用这些技术,你可以快速检测服务器的状态,包括CPU使用率、内存占用和磁盘空间等关键指标。这不仅有助于及时发现问题,还能提升运维效率。文章将逐步引导你理解监控的重要性,并展示如何从零开始构建自己的监控工具。
|
20天前
|
Web App开发 XML 测试技术
自动化测试框架设计:以Python和Selenium为例
【8月更文挑战第31天】在软件开发的快节奏中,自动化测试成为确保产品质量的关键步骤。本文将引导读者了解如何结合Python语言和Selenium工具来设计一个高效的自动化测试框架。通过浅显易懂的语言和实际代码示例,我们将探索自动化测试框架的核心组件,并学习如何实现它们。无论你是测试新手还是希望提升自动化技能的开发者,这篇文章都将为你打开一扇通向高效软件测试的大门。
|
19天前
|
存储 运维 监控
自动化运维:使用Python脚本进行服务器监控
【8月更文挑战第31天】在数字化时代,服务器的稳定运行对于企业至关重要。本文将介绍如何使用Python编写一个简单的服务器监控脚本,帮助运维人员及时发现并解决潜在问题。我们将从基础的服务器资源监控开始,逐步深入到日志分析与报警机制的实现。通过实际代码示例和操作步骤,使读者能够快速掌握自动化监控的技能,提升工作效率。