flask的app.py
python
import asyncio
import time
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
@app.route('/sync')
def func_sync():
start = time.time()
for i in range(10):
time.sleep(1)
end = time.time()
return {"time": f'{(end - start):.2f}s'}
@app.route('/async')
async def func_async():
start = time.time()
tasks = [asyncio.sleep(1) for i in range(10)]
await asyncio.gather(*tasks)
end = time.time()
return {"time": f'{(end - start):.2f}s'}
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
fastAPI的app.py
python
import asyncio
import time
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get('/')
def hello_world():
return {'message': 'Hello World!'}
@app.get('/sync')
def func_sync():
start = time.time()
for i in range(10):
time.sleep(1)
end = time.time()
return {"time": f'{(end - start):.2f}s'}
@app.get('/async')
async def func_async():
start = time.time()
tasks = [asyncio.sleep(1) for i in range(10)]
await asyncio.gather(*tasks)
end = time.time()
return {"time": f'{(end - start):.2f}s'}
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
Flask 与 FastAPI 对比分析
基于提供的两个文件,以下是 Flask 和 FastAPI 的主要区别对比:
1. 框架导入和应用创建
-
Flask:
pythonfrom flask import Flask app = Flask(__name__) -
FastAPI:
pythonfrom fastapi import FastAPI app = FastAPI()
2. 路由装饰器
-
Flask : 统一使用
@app.route()装饰器-
flask app.py\] 中使用 `@app.route('/')`、`@app.route('/sync')`、`@app.route('/async')`
-
fastAPI app.py\]中使用 `@app.get('/')`、`@app.get('/sync')`、`@app.get('/async')`
-
-
Flask : 使用内置的
app.run()方法 -
FastAPI : 依赖 Uvicorn 或其他 ASGI 服务器,使用
uvicorn.run()
4. 返回数据格式
- Flask : 可以返回字符串或字典
hello_world()返回字符串
- FastAPI : 推荐返回字典,自动处理 JSON 序列化
hello_world()返回字典
5. 异步支持
- Flask : 需要显式定义异步函数
async def - FastAPI: 原生异步支持,语法更简洁
6. 性能和功能
- FastAPI 相比 Flask 的优势:
- 自动 API 文档生成(Swagger UI)
- 内置数据验证
- 更好的类型提示支持
- 更高的性能(基于 ASGI)
7. 运行时依赖
- Flask: 使用内置开发服务器
- FastAPI: 需要安装和使用 ASGI 服务器(如 Uvicorn)
Flask 异步支持详解
Flask 异步处理配置说明
1. 基本异步支持
你提供的代码中使用 async def 定义异步函数的方式确实是 Flask 的异步实现,但这只是基础配置。
2. 真正的生产环境配置
Flask 要实现真正的高并发异步处理,需要以下配置:
ASGI 服务器部署
python
# 仅用 Flask 内置服务器无法发挥异步优势
# 需要使用 Gunicorn + gevent/eventlet 或 Uvicorn
生产环境部署方式
- Uvicorn :
pip install uvicorn[standard] - Gunicorn + gevent :
pip install gunicorn gevent
配置示例
bash
# 使用 Uvicorn 运行 Flask (需要 Quart 替代 Flask)
uvicorn app:app --workers 4
# 或使用 Gunicorn
gunicorn -k gevent -w 4 --timeout 120 app:app
3. 关键区别
| 配置 | Flask 内置服务器 | 生产级 ASGI 服务器 |
|---|---|---|
| 并发处理 | 单线程阻塞 | 多协程并发 |
| 异步性能 | 有限 | 高效 |
| 生产适用性 | 不推荐 | 推荐 |
4. 总结
代码中的 async def 语法是正确的,但在生产环境中需要配合ASGI 服务器(如 Uvicorn)才能实现真正的高并发异步处理效果。