fastapi nodejs 性能比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastapi nodejs 性能比较相关的知识,希望对你有一定的参考价值。

参考技术A

FastAPI是一个现代、快速(高性能)的 Web 框架,基于标准 Python 类型提示,使用 Python 3.6+ 构建 API。

主要特征是:

    高速:与NodeJS和Go相当,拥有高性能。 现有最快的Python框架之一。

    快速编码:将功能开发速度提高约200%至300%。

    更少的Bug:减少约40%的人为(开发人员)导致的错误。

    直观:更好的编辑支持。补全任何地方。更少的调试时间。

    简单:方便使用和学习。减少阅读文档的时间。

    简介:最小化代码重复。每个参数声明的多个要素。更少的错误。

    健壮:获取便于生产的代码。带自动交互式文档。

    基于标准:基于(并完全兼容)API 的开放标准:OpenAPI(以前称为Swagger)和 JSON Schema。



    作者:星轨无尽
    链接:https://www.jianshu.com/p/0ab64419744c
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

flask与fastapi性能测试

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

# 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 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。

以上是关于fastapi nodejs 性能比较的主要内容,如果未能解决你的问题,请参考以下文章

FastAPI学习-1.环境准备与基础入门

luvit 被忽视的lua 高性能框架(仿nodejs)

Sanic FastApi Gin性能对比

2017年的golangpythonphpc++cjavaNodejs性能对比(golang python php c++ java Nodejs Performance)

flask与fastapi性能测试

FastAPI框架快速构建高性能的api服务