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

相关推荐
X56612 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
ZhengEnCi3 小时前
03ab-PyTorch安装教程 📚
python
狐狐生风3 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风3 小时前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
绘梨衣5474 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
老前端的功夫4 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
yaoxin5211234 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
dFObBIMmai4 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw04 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
小白学大数据5 小时前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化