ASGI(Asynchronous Server Gateway Interface,异步服务器网关接口)是 Python Web 应用的一种异步通信标准,用于连接 Web 服务器和异步 Python Web 框架(如 FastAPI、Starlette、Quart 等)。要理解 ASGI,我们可以把它和传统的 WSGI(Web Server Gateway Interface) 服务器进行对比。


1. WSGI:传统同步服务器标准

什么是 WSGI?

  • WSGI 是 Python 为同步 Web 应用定义的标准接口(PEP 3333)。
  • 它规定了 Web 服务器(如 Apache、Nginx + uWSGI/Gunicorn)如何与 Python Web 框架(如 Flask、Django <3.0)通信。
  • 每个请求由一个独立的线程或进程处理,处理完才响应下一个请求。

典型 WSGI 架构:

浏览器 → Nginx → Gunicorn/uWSGI(WSGI 服务器) → Flask/Django(同步应用)

WSGI 的局限:

  • 不支持异步:无法高效处理 WebSocket、长轮询、Server-Sent Events(SSE)等。
  • 高并发性能瓶颈:每个请求占用一个线程/进程,资源消耗大。
  • 例如:Flask 本身是同步的,即使你用 async def,在 WSGI 下也无法真正异步执行。

 常见 WSGI 服务器:Gunicorn(同步 worker)、uWSGImod_wsgi


2. ASGI:现代异步服务器标准

什么是 ASGI?

  • ASGI 是 WSGI 的异步扩展(由 Django 团队提出),支持异步 I/O、WebSocket、HTTP/2 等。
  • 它允许一个应用同时处理多个请求(通过事件循环),而不需要为每个请求创建新线程。
  • 一个进程可以处理成千上万个并发连接(适合 I/O 密集型任务,如 API、实时通信)。

典型 ASGI 架构:

浏览器 → Nginx → Uvicorn/Daphne(ASGI 服务器) → FastAPI/Starlette/Django 3.0+(异步应用)

ASGI 的优势:

异步支持

可使用async/await处理数据库、API 调用等

WebSocket 原生支持

无需额外协议或库

高并发低资源

单进程可处理大量连接(基于 asyncio)

向后兼容 WSGI

ASGI 服务器通常也能运行同步应用(通过线程池)

常见 ASGI 服务器:Uvicorn(最快,基于 uvloop)、Daphne(Django 官方)、Hypercorn


对比总结:ASGI vs WSGI

同步/异步

仅同步

支持异步 + 兼容同步

WebSocket

不支持

原生支持

并发模型

多线程/多进程

单线程事件循环(asyncio)

适用框架

Flask, Django (<3.0)

FastAPI, Starlette, Django (≥3.0), Quart

典型服务器

Gunicorn (sync), uWSGI

Uvicorn, Daphne, Hypercorn

性能(I/O 密集)

较低(线程开销大)

更高(轻量级协程)

学习曲线

简单

需理解 async/await


举个实际例子

场景:一个 API 需要调用外部服务(如天气 API)

WSGI(Flask)方式:
# 每个请求阻塞等待外部 API 响应
@app.route("/weather")
def get_weather():
    response = requests.get("https://api.weather.com/...")  # 阻塞!
    return response.json()

→ 100 个并发请求 = 100 个线程,资源消耗大。

ASGI(FastAPI)方式:

python

import httpx

@app.get("/weather")
async def get_weather():
    async with httpx.AsyncClient() as client:
        response = await client.get("https://api.weather.com/...")  # 非阻塞!
    return response.json()

→ 100 个并发请求 = 1 个事件循环,高效利用 CPU。


总结

  • WSGI 是 Python 同步 Web 应用的“老标准”,简单但无法处理现代异步需求。
  • ASGI异步 Web 应用的“新标准”,支持 WebSocket、高并发、async/await,是 FastAPI 等现代框架的基础。
  • Uvicorn 是目前最流行的 ASGI 服务器(快、轻量、兼容性好)
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐