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

相关推荐
喵手8 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934738 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy9 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
肖永威10 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ10 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha10 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy11 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法
喵手11 小时前
Python爬虫实战:构建各地统计局数据发布板块的自动化索引爬虫(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集数据csv导出·采集各地统计局数据发布数据·统计局数据采集
天天爱吃肉821812 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
m0_7155753412 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python