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

相关推荐
leisoo80971 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20222 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
金銀銅鐵4 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
java1234_小锋4 小时前
【免费】基于Python的微信小程序网约车(打车,在线叫车,移动出行)系统(FastAPI+Vue3) 锋哥原创出品,必属精品
微信小程序·小程序·fastapi·网约车系统·在线叫车系统
Python大数据分析@6 小时前
使用大模型MCP采集数据,爬虫已经无门槛
python·网络爬虫
quantdash_cc6 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash
65岁退休Coder6 小时前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境7 小时前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
半亩码田7 小时前
C#转Python第3.1篇:Python 的 class 没有访问修饰符?面向对象的另一条路
开发语言·python·c#
Wzx1980128 小时前
python沙箱和docker沙箱你选对了吗?
开发语言·python·docker