Sanic vs Flask vs FastAPI:Python 三大 Web 框架谁才是王者?

测试实例就用一个简单的json返回进行压测:

Sanic测试程序如下:


from sanic import Sanic
from sanic.response import text
import json

app = Sanic(__name__)


@app.route("/")
async def test(request):
    messages = [
        {
            "role": "system",
            "content": "请你扮演一个有20年中小学K12在线教育的老师,给孩子推荐课程。"
        },
        {
            "role": "user",
            "content": "请问我需要购买哪些课程。"
        }
    ]

    res = json.dumps(messages)
    return text(res)


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

Sanic测试数据如下:

└─[0] <git:(main f3108d7) > wrk -t8 -c400 -d10s http://localhost:8000/
Running 10s test @ http://localhost:8000/
  8 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     5.81ms    5.46ms 171.21ms   99.30%
    Req/Sec     9.06k   491.75    11.04k    90.62%
  721792 requests in 10.01s, 283.60MB read
  Socket errors: connect 0, read 849, write 17, timeout 0
Requests/sec:  72105.18
Transfer/sec:     28.33MB

Flask的测试代码如下:

import json
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    messages = [
        {
            "role": "system",
            "content": "请你扮演一个有20年中小学K12在线教育的老师,给孩子推荐课程。"
        },
        {
            "role": "user",
            "content": "请问我需要购买哪些课程。"
        }
    ]

    res = json.dumps(messages)
    return {"name": res}

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

Flask的测试结果如下:

└─[0] <git:(main f3108d7) > wrk -t8 -c400 -d10s http://localhost:5000/
Running 10s test @ http://localhost:5000/
  8 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    29.00ms   32.58ms 286.00ms   96.62%
    Req/Sec   529.40    243.40     1.09k    71.05%
  16468 requests in 10.07s, 8.56MB read
  Socket errors: connect 161, read 24535, write 127, timeout 0
Requests/sec:   1635.05
Transfer/sec:    870.22KB

FastAPI的测试程序如下:

import json
from typing import Union
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    messages = [
        {
            "role": "system",
            "content": "请你扮演一个有20年中小学K12在线教育的老师,给孩子推荐课程。"
        },
        {
            "role": "user",
            "content": "请问我需要购买哪些课程。"
        }
    ]

    res = json.dumps(messages)
    return {"name": res}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

请用如下命令启动:

 fastapi dev fastapitest.py
 

fastAPI的测试数据如下:

└─[0] <git:(main f3108d7) > wrk -t8 -c400 -d10s http://localhost:8000/
Running 10s test @ http://localhost:8000/
  8 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    81.88ms   30.23ms 392.96ms   89.23%
    Req/Sec   610.37     94.68     1.11k    83.62%
  48742 requests in 10.05s, 23.20MB read
  Socket errors: connect 0, read 1314, write 8, timeout 0
Requests/sec:   4849.82
Transfer/sec:      2.31MB

谁才是王者?

Sanic的QPS:72105.18

Flask的QPS:1635.05

FastAPI的QPS:4849.82

Sanic完美胜出。

Sanic:适合高性能API开发,尤其是高并发,高性能的场景。

Flask:适合小型项目或需要高度定制的场景,灵活性是其最大优势。

FastAPI:适合普通性能 API 开发,尤其是在需要自动生成文档和类型安全的场景下。

最终选择哪个框架,取决于你的项目需求和团队技术栈。 如果你追求快速开发,FastAPI 是不二之选;如果你需要灵活性和自由度,Flask 更适合你;而如果你专注于高性能 API 开发,Sanic 则是你的最佳选择。

参考资料

uvloop: Blazing fast Python networking — magicstack

python 服务也可以很快_sanic flask fastapi 性能对比-优快云博客

Python异步框架大战:FastAPI、Sanic、Tornado VS Go 的 Gin_sanic和fastapi哪个好-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值