Migrate flask to uvicorn

写了一个 Flask 的应用,但老是提示“不要在生产环境下使用”,于是将 Flask 应用迁移到 Uvicorn 应用。

Flask 2.0+ 原生支持

安装

pip install uvicorn fastapi
pip install flask[async]      # Flask 2.0+ 官方方案

修改

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
async def hello():  # 关键:使用 async 定义视图函数
    return {"message": "Hello from Uvicorn!"}

# 支持混合使用同步/异步路由
@app.route("/sync")
def sync_route():
    return "I'm synchronous but run in async worker"

运行

shell

uvicorn app:asgi_app --host 0.0.0.0 --port 8000 --reload

Python

# run_server.py
import uvicorn

if __name__ == "__main__":
    uvicorn.run(
        "app:asgi_app",         # 应用导入路径
        host="0.0.0.0",
        port=8000,
        reload=True,        # 开发模式热重载
        workers=4           # 生产环境建议设置
    )

通过 ASGI 适配器以兼容老版本

安装

pip install uvicorn fastapi
pip install asgiref           # 兼容旧版 Flask 的适配器

修改

# app.py
from flask import Flask
from asgiref.wsgi import WsgiToAsgi

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from legacy Flask with Uvicorn!"

# 包装为 ASGI 应用
asgi_app = WsgiToAsgi(app)

运行

shell

uvicorn app:asgi_app --host 0.0.0.0 --port 8000 --reload

Python

# run_server.py
import uvicorn

if __name__ == "__main__":
    uvicorn.run(
        "app:app",         # 应用导入路径
        host="0.0.0.0",
        port=8000,
        reload=True,        # 开发模式热重载
        workers=4           # 生产环境建议设置
    )

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注