Python Web 框架性能研究
三个方面:性能上,应用场景上,框架本身特点
性能上:
性能测试工具基本介绍:测试环境: 电脑环境:win10 i5 4G独显 8G内存 ubuntu18.04 python3.6.8 ab 2.3 python2.7
ab是Apache超文本传输协议(HTTP)的性能测试工具。 主要用它来测试框架每秒处理的请求数
并发连接数:某个时刻服务器所接受的请求数目
并发用户数:简单理解就是用户数
吞吐量(率):每秒处理的请求数
服务器平均请求等待时间: 处理完成所有请求数所花费的时间 / 总请求数
简单理解就是:处理每个请求平均花费的时间,单位是毫秒
执行原理 例如:1000并发连接数 100并发用户数指的是 模拟100用户在同一时刻连续不断的发送1000个请求给服务器
测试分为5组,
分别是 100并发连接数 100并发用户数
1000并发连接数 100并发用户数
10000并发连接数 100并发用户数
10000并发连接数 500并发用户数
10000并发连接数 1000并发用户数
每组数据测了5次求的平均值
GET请求:
# flask
@app.route("/hello")
def hello_test():
grate = 85
if grate > 90:
res = "非常优秀"
elif grate > 80:
res = "优秀"
elif grate > 70:
res = "良好"
elif grate > 60:
res = "及格"
else:
res = "不及格"
return res
# tornado
class IndexHandler(tornado.web.RequestHandler):
def get(self,*args,**kwargs):
grate = 85
if grate > 90:
res = "非常优秀"
elif grate > 80:
res = "优秀"
elif grate > 70:
res = "良好"
elif grate > 60:
res = "及格"
else:
res = "不及格"
self.write(res)
# sanic
@app.route("/")
async def index(request):
grate = 85
if grate > 90:
res = "非常优秀"
elif grate > 80:
res = "优秀"
elif grate > 70:
res = "良好"
elif grate > 60:
res = "及格"
else:
res = "不及格"
return text(res)
# fastapi
@app.get("/")
async def root():
grate = 85
if grate > 90:
res = "非常优秀"
elif grate > 80:
res = "优秀"
elif grate > 70:
res = "良好"
elif grate > 60:
res = "及格"
else:
res = "不及格"
return res
测试结果:
第一吞吐量测试
结论:GET请求中,sanic,fastapi框架每秒处理的请求出最多,其次是tornado和flask+gevent
第二用户平均等待时间
结论:当并发用户数比较小时,各各框架之间用户平均等待时间相差是不大的,当并发用户数达到较高时,sanic框架和fastapi框架明显在用户平均等待时间上远远小于其他框架,性能更好
POST请求
#flask
@app.route("/login",methods=["POST","GET"])
def login_test():
if request.method == "GET":
return render_template("index.html")
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
if username == "te