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.get()、@app.post() 等
    • fastAPI app.py中使用 @app.get('/')、@app.get('/sync')、@app.get('/async')

3. 服务器启动方式

  • 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)才能实现真正的高并发异步处理效果。

相关推荐
GitFun2 小时前
KDJ vs RSI:11年数据实测,金叉死叉输了48个点
python·股票·量化交易
李可以量化2 小时前
从零读懂配对交易(上):从套利本源到配对交易的核心逻辑
python·区块链·量化交易·通达信·qmt
CCblandy2 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
wangchunyu1142 小时前
Python 数据可视化实战入门教程
开发语言·python·信息可视化
蜗牛互联网2 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff3 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
蚰蜒螟3 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
高洁014 小时前
AI赋能产业升级与中美未来经济赛道博弈
人工智能·python·深度学习·机器学习·transformer
夜晚回家4 小时前
Python 原始字符串详解 | r 前缀到底让什么不再转义
开发语言·python
用户019027581614 小时前
如何用 Python 计算 EMV 简易波动指标?
python