如何在Python中使用ASGI2版本应用?有哪些ASGI2兼容应用?
关于ASGI 2版本的使用及相关应用
一、如何使用ASGI 2版本
ASGI 2属于旧版本协议,目前主流框架多已转向ASGI 3,但仍有两种方式可以使用ASGI 2:
1. 在ASGI 3框架中兼容运行ASGI 2应用
可以借助asgiref库中的ASGI2Adapter做协议适配,把ASGI 2应用转换为ASGI 3兼容的格式。示例代码如下:
from asgiref.adapters import ASGI2Adapter # 定义一个标准的ASGI 2应用 def asgi2_application(scope): def start_response(status, response_headers): # 处理响应状态码和响应头的逻辑 pass # 返回响应内容迭代器 return iter([b"ASGI 2 Protocol Response"]) # 适配为ASGI 3兼容的应用 adapted_app = ASGI2Adapter(asgi2_application) # 直接运行适配后的应用即可 application = adapted_app
如果是基于Django这类支持ASGI 3的框架,也可以用同样的方式把ASGI 2应用集成进去。
2. 使用原生支持ASGI 2的旧版本框架
直接安装框架的历史版本,比如:
- 安装支持ASGI 2的Starlette旧版本:
pip install starlette==0.13.6 - 安装对应版本的FastAPI:
pip install fastapi==0.61.2(依赖的Starlette版本支持ASGI 2)
二、除Django外,原生支持ASGI 2的应用/框架
- Starlette(旧版本):0.14.0版本之前的Starlette基于ASGI 2开发,后续版本全面切换到ASGI 3。
- FastAPI(旧版本):早期版本依赖的Starlette支持ASGI 2,因此对应版本的FastAPI也兼容ASGI 2。
- Uvicorn(旧版本):0.12.x及更早版本的ASGI服务器,同时支持ASGI 2和ASGI 3协议。
- Quart(旧版本):Quart的早期版本原生支持ASGI 2,后续迭代更新到ASGI 3。
- Sanic(旧版本):部分旧版本的Sanic框架提供ASGI 2协议支持。
内容的提问来源于stack exchange,提问作者김재영
相关产品推荐
相关产品推荐

