>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 安全
Python

Uvicorn - 一个将改变你对 Python 开发认知的异步 Web 服务器

10,804 星标

Uvicorn logo

为什么开发者会爱上 Uvicorn

还记得 WSGI 是 Python Web 唯一标准的时代吗?异步请求、WebSocket 和长连接都被排除在外。ASGI(异步服务器网关接口)解决了这个问题,而 Uvicorn 成为其中最流行的实现之一。

这个以独角兽为标志的轻量级服务器支持 HTTP/1.1 和 WebSocket,运行在 asyncio 之上。但最重要的是——它已成为 FastAPI、Starlette 和 Quart 等现代 Python 框架的事实标准。

开发者会欣赏的关键特性

  1. 极快的速度 — 归功于 uvloop 和 httptools(使用 'standard' 选项安装时)
  2. 易于集成 — 可与任何 ASGI 兼容框架配合使用
  3. 生产就绪 — 在负载下性能稳定
  4. 灵活配置 — 从最小化设置到扩展工具包
  5. 内置开发模式,支持自动重载

快速入门

你可以通过两种方式安装 Uvicorn:

# Минимальная установка
pip install uvicorn

# С оптимизациями для production
pip install 'uvicorn[standard]'

简单 ASGI 应用示例(保存为 example.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 example:app

Uvicorn 如何超越 WSGI 服务器

传统的 WSGI 服务器(如 Gunicorn)非常适合同步应用,但在以下场景中表现吃力:

  • 长连接(WebSocket、长轮询)
  • 异步 I/O 操作
  • 后台任务

Uvicorn 在这些场景中表现出色,使 Python 在现代 Web 技术世界中具有竞争力。

替代方案及何时选择它们

虽然 Uvicorn 是一个出色的选择,但 ASGI 生态系统中还有其他选项:

  • Daphne — ASGI 先驱,支持 HTTP/2
  • Hypercorn — 支持 trio 的替代方案
  • Granian — 专注于性能的 Rust 实现

选择取决于你的需求:如果 HTTP/2 支持对你至关重要——看看 Daphne;如果追求极致速度——你可能想尝试 Granian。

来自一线:我们在哪里使用 Uvicorn

在我们的 FastAPI 后端中,Uvicorn 已成为不可或缺的工具:

  • 开发环境 — 配合自动重载和详细日志
  • 生产环境 — 作为部署的一部分,使用 Gunicorn 作为进程管理器

我们特别欣赏的是配置的简洁性——只需几个命令行参数就能微调性能。

结论:值得一试吗?

如果你:

  • 使用 FastAPI、Starlette 或其他 ASGI 框架
  • 需要 WebSocket 支持
  • 想充分发挥异步 Python 的优势

— Uvicorn 将是一个绝佳的选择。它是一个经过验证的解决方案,拥有出色的文档和活跃的社区。

对于传统的 WSGI 项目,它可能不太适合,但对于任何新项目——我强烈建议你尝试一下。就我个人而言,Uvicorn 之后,再回到同步 Web 开发已经不再吸引我了。

相关项目