目前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的生态圈能越来越优秀。