fastapi python 并发_Flask、Django、Tornado、FastAPI 之 Python Web 并发测试

吴浩皛
2023-12-01

目前Python Web生态圈中涌现出许许多多优秀的Web框架,投入生产最多的要属Flask和Django,Tornado有别于上述两种框架,它是Python界的一大异步网络框架,可以支撑上万级的连接,FastAPI则是这几个框架中的一个新秀,它是一款集成了Swagger文档的高性能Web框架。

对于这四种不同的Python Web框架,各有特点,一般适用于不同的业务场景。为了进一步了解他们的并发性能,我将在同样的系统环境下对他们依次进行压测。

Webbench

Webbench是一个网站测压工具,它能测试相同硬件上,不同服务的性能;以及不同硬件上同一个服务的运行状况。Webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数、每秒钟传输数据量。并且它最多支持模拟3W个并发连接测试服务器负载能力。

下载

通过GitHub下载源码

git clone https://github.com/EZLippi/WebBench

安装

sudo make && sudo make install PREFIX=your_path_to_webbench

压测命令

webbench -c 500 -t 5 http://127.0.0.1:5000/

代码

此处的代码均是框架官网的快速开始小案例,有需要的可以直接参考不同官网的示例代码。

Flask

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello_flask():

return 'Hello, flask!'

if __name__ == '__main__':

app.run(host='0.0.0.0')

Django

安装完后直接运行

python3 manage.py runserver

Tornado

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("Hello, world")

def make_app():

return tornado.web.Application([

(r"/", MainHandler),

])

if __name__ == "__main__":

app = make_app()

app.listen(8888)

tornado.ioloop.IOLoop.current().start()

FastAPI

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

def read_root():

return {"Hello": "World"}

压测结果

Flask

5秒 500并发

5秒 1000并发

Django

1秒 500并发

Tornado

5秒 500并发

5秒 1000并发

FastAPI

5秒 500并发

5秒 1000并发

总结

测试结果会因为系统环境的不同会有偏差,Django的测试其实并不需要,因为其内置的服务器性能极低,一般会有替代方案做生产使用。从测试的截图结果来看,FastAPI的表现让我大开眼界,并发性能竟然超过了Tornado,也希望日后Python Web的生态圈能越来越优秀。

 类似资料: