flask与fastapi性能测试
创始人
2024-02-18 13:29:30

flask与fastapi性能测试

背景

sy项目通过MQ接受业务系统的业务数据,通过运行开发者开发的python脚本执行业务系统与财务系统数据的一致性校验。
sy系统需要每天运行大量的python脚本。目前使用falsk日运行6W+次python脚本,由于性能存在瓶颈,需要引入
新的fastapi框架,来解决cpu、内存性能压榨不够及目前的性能瓶颈。本文目标给出两者的性能测试报告。
给出选择哪个框架的性能数据支撑。

apache ab介绍

apache ab性能测试

安装

    yum -y install httpd-tools

部分参数说明

-n  执行的请求总数-c 并发数, 同时执行的数量, c不能大于n
-p post请求指定的文件
-T header Content-type值,默认为 'text/plain'

测试get请求

ab -c 10  http://127.0.0.1:8081/cppla

测试post请求

ab -n 100 -c 10 -T 'application/json' -p httpjson.txt  http://127.0.0.1:8081/cppla1  // httpjson.txt的内容
{"recordId": 123}

测试计划

模拟真实每次请求调用脚本,分别对每一个数量级的请求量进行测试。

请求总数每次并发数每次并发数每次并发数
100101001000
1000101001000
10000101001000
20000101001000
30000101001000
40000101001000
50000101001000
60000101001000
80000101001000

测试代码

处理post请求,延时3s返回结果。flask启动20个进程。fastapi启动一个进程。

## flask 代码
# coding: utf-8
from gevent import monkey
from gevent.pywsgi import WSGIServer
import requestsimport datetime
import os
from multiprocessing import cpu_count, Process
from flask import Flask, jsonify,request
import json
import tracebackimport importlib
from loguru import logger
import timeapp = Flask(__name__)# 执行run方法
@app.route("/cppla1", methods=['POST', 'GET'])
def cppla1():data = request.jsontime.sleep(3)return data
# 启动监听ip、端口
def run(MULTI_PROCESS):if MULTI_PROCESS == False:WSGIServer(('0.0.0.0', 8081), app).serve_forever()else:mulserver = WSGIServer(('0.0.0.0', 8081), app)mulserver.start()def server_forever():mulserver.start_accepting()mulserver._stop_event.wait()# for i in range(cpu_count()):for i in range(20):logger.info('启动进程第几个:{}', i)p = Process(target=server_forever)p.start()if __name__ == "__main__":# 单进程 + 协程# run(False)# 多进程 + 协程log_init()run(True)
## fastapi
# coding: utf-8# https://www.javazhiyin.com/80750.html
# import web framework
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse# import base lib
import datetime
import os
import requests
import json
import traceback
import importlib
from loguru import logger
import timeapp = FastAPI()@app.post("/cppla1")
def function_benchmark(data:dict):time.sleep(3)return {"item": data}# 启动监听ip、端口
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8081)

测试结果

框架类型请求总数每次并发数耗时(s)每次并发数耗时(s)每次并发数耗时(s)
fastapi1001033.11910012.1481000ab命令不支持
flask1001045.08810081.1061000ab命令不支持
fastapi100010304.05710078.283100078.631
flask100010327.472100198.2731000303.442
fastapi1000010x100754.2961000757.719
flask1000010x1001550.11910001970.427
fastapi2000010x100x1000x
flask2000010x100x1000x
fastapi3000010x100x1000x
flask3000010x100x1000x
fastapi4000010x100x1000x
flask4000010x100x1000x
fastapi5000010x100x1000x
flask5000010x100x1000x
fastapi6000010x100x1000x
flask6000010x100x1000x
fastapi8000010x100x1000x
flask8000010x100x1000x

结论

fastapi是flask性能的3倍,推荐使用fastap。

相关内容

热门资讯

毫米级贴边与全域清洁 泳池机器... 封面新闻记者 吴雨佳近日,拉斯维加斯国际消费类电子产品展览会(CES 2026)现场,随着智能家居场...
A股今年首份银行高管增持公告来... 转自:财联社财联社1月12日讯(记者 邹俊涛)A股今年首份银行高管增持公告“出炉”。1月12日晚,渝...
市十六届人大常委会第二十七次会... (来源:上观新闻)市十六届人大常委会第二十七次会议今天(1月12日)举行。市人大常委会主任黄莉新主持...
钱大妈冲刺港交所:社区生鲜龙头...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   1月12日,社区...
V观财报|中新集团、会稽山齐发...   中新经纬1月12日电 1月12日,中新苏州工业园区开发集团股份有限公司(下称“中新集团”)、会稽...