Flask 与 FastAPI 对比分析

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:

    python 复制代码
    from flask import Flask
    app = Flask(__name__)
  • FastAPI:

    python 复制代码
    from 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)才能实现真正的高并发异步处理效果。

相关推荐
寻星探路9 小时前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
智航GIS9 小时前
10.5 PyQuery:jQuery 风格的 Python HTML 解析库
python·html·jquery
小兔崽子去哪了9 小时前
机器学习,梯度下降,拟合,正则化,混淆矩阵
python·机器学习
缘友一世10 小时前
PyCharm连接autodl平台服务(python解释器&jupyter lab)
python·jupyter·pycharm
a程序小傲10 小时前
得物Java面试被问:方法句柄(MethodHandle)与反射的性能对比和底层区别
java·开发语言·spring boot·后端·python·面试·职场和发展
华研前沿标杆游学10 小时前
2026走进滕讯:小游戏×大模型产业交流记
python
_codemonster10 小时前
计算机视觉入门到实战系列(八)Harris角点检测算法
python·算法·计算机视觉
默默前行的虫虫10 小时前
nicegui的3D可视化
python
hui函数11 小时前
Python系列Bug修复|如何解决 pip install -e . 安装报错 “后端不支持可编辑安装(PEP 660)” 问题
python·bug·pip