Python flask与fastapi性能测试方法介绍

 更新时间:2022年12月09日 15:18:51   作者:我爱看明朝  
这篇文章主要介绍了Python 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 requests
import datetime
import os
from multiprocessing import cpu_count, Process
from flask import Flask, jsonify,request
import json
import traceback
import importlib
from loguru import logger
import time
app = Flask(__name__)
# 执行run方法
@app.route("/cppla1", methods=['POST', 'GET'])
def cppla1():
    data = request.json
    time.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
# 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 time
app = FastAPI()
@app.post("/cppla1")
def function_benchmark(data:dict):
    time.sleep(3)
    return {"item": data}
# 启动监听ip、端口
if __name__ == "__main__":
    import uvicorn
    uvicorn.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。

到此这篇关于Python flask与fastapi性能测试方法介绍的文章就介绍到这了,更多相关flask与fastapi性能测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python线程指南分享

    Python线程指南分享

    今天小编就为大家带来Python线程指南分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • pytorch无法使用GPU问题的解决方法

    pytorch无法使用GPU问题的解决方法

    这篇文章主要介绍了如何解决pytorch 无法使用GPU 的问题,文中通过代码和图文给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Python Django框架模板渲染功能示例

    Python Django框架模板渲染功能示例

    这篇文章主要介绍了Python Django框架模板渲染功能,结合实例形式分析了Django框架模板渲染相关的配置、视图调用、变量赋值等相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • 在Python中操作字典之setdefault()方法的使用

    在Python中操作字典之setdefault()方法的使用

    这篇文章主要介绍了在Python中操作字典之setdefault()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 使用Playwright进行视觉回归测试详解

    使用Playwright进行视觉回归测试详解

    这篇文章主要介绍了使用Playwright进行视觉回归测试详解,视觉回归测试是一种软件测试技术,专注于检测Web应用程序或网站的用户界面中的视觉变化和差异,需要的朋友可以参考下
    2023-08-08
  • Python验证文件是否可读写代码分享

    Python验证文件是否可读写代码分享

    这篇文章主要介绍了Python验证文件是否可读写代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Python+OpenCV图像处理之直方图统计

    Python+OpenCV图像处理之直方图统计

    直方图就是对图像的另外一种解释,它描述了整幅图像的灰度分布。通过直方图我们可以对图像的亮度、灰度分布、对比度等有了一个直观的认识。本文将为大家详细介绍一下如何通过OpenCV实现直方图统计,感兴趣的可以了解一下
    2021-12-12
  • Django如何使用asyncio协程和ThreadPoolExecutor多线程

    Django如何使用asyncio协程和ThreadPoolExecutor多线程

    这篇文章主要介绍了Django如何使用asyncio协程和ThreadPoolExecutor多线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 利用Python字符画生成甜心教主

    利用Python字符画生成甜心教主

    字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感。 本文将利用Python字符画绘制一个甜心教主王心凌,需要的可以参考一下
    2022-05-05
  • 解决pycharm下pyuic工具使用的问题

    解决pycharm下pyuic工具使用的问题

    这篇文章主要介绍了解决pycharm下pyuic工具使用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论