测试代码
Sanic:
from sanic import Sanicfrom sanic.response import jsonfrom sanic.request import Requestapp = Sanic("Demo Of Sanic")@app.get("/")async def test(request: Request): return json({'Hello': 'World'})if __name__ == '__main__': app.run(workers=8)
Fiber:
package mainimport ( "github.com/gofiber/fiber/v2")func main() { app := fiber.New() app.Get("/", func(c *fiber.Ctx) error { return c.JSON(map[string]string{ "Hello": "World", }) }) app.Listen(":8000")}
压测
压测应用的程序是go-stress-testing
,1000
个并发,每个并发进行1000
次申请。
每栏对应的字段为:
耗时 │ 并发数 │ 胜利数│ 失败数 │ qps │ 最长耗时 │ 最短耗时│ 均匀耗时│ 下载字节│ 字节每秒│ 错误码
Sanic:
... 1s│ 1000│ 4064│ 0│ 4688.36│ 428.60│ 106.12│ 213.29│ 69,088│ 69,028│200:4064 ... 188s│ 1000│ 989209│ 0│ 5404.96│ 578.58│ 71.49│ 185.02│16,816,553│ 89,449│200:989209 189s│ 1000│ 995278│ 0│ 5409.15│ 578.58│ 71.49│ 184.87│16,919,726│ 89,522│200:995278 190s│ 1000│1000000│ 0│ 5420.32│ 578.58│ 0.40│ 184.49│17,000,000│ 89,621│200:1000000************************* 后果 stat ****************************解决协程数量: 1000申请总数(并发数*申请数 -c * -n): 1000000 总申请工夫: 189.687 秒 successNum: 1000000 failureNum: 0tp90: 235.000tp95: 299.000tp99: 387.000************************* 后果 end ****************************
Fiber:
... 1s│ 1000│ 4264│ 0│ 4944.17│ 428.17│ 103.75│ 202.26│ 72,488│ 72,486│200:4264... 160s│ 1000│ 991952│ 0│ 6367.34│ 428.17│ 87.23│ 157.05│16,863,184│ 105,394│200:991952 161s│ 1000│ 998890│ 0│ 6374.53│ 428.17│ 60.73│ 156.87│16,981,130│ 105,472│200:998890 161s│ 1000│1000000│ 0│ 6379.79│ 428.17│ 0.31│ 156.75│17,000,000│ 105,514│200:1000000************************* 后果 stat ****************************解决协程数量: 1000申请总数(并发数*申请数 -c * -n): 1000000 总申请工夫: 161.116 秒 successNum: 1000000 failureNum: 0tp90: 175.000tp95: 182.000tp99: 198.000************************* 后果 end ****************************
能够看进去,sanic
和fiber
差异不大,sanic
的性能简直与fiber
持平,可能是当下最高性能的 Python Web 框架,没有之一,即使是之前较为突出的异步框架fastapi
也要落后于sanic
。
附上fastapi
的后果:
... 1s│ 1000│ 3140│ 0│ 3868.18│ 397.67│ 98.50│ 258.52│ 53,380│ 52,552│200:3140... 239s│ 1000│ 991225│ 0│ 4254.52│ 557.98│ 87.20│ 235.04│16,850,825│ 70,505│200:991225 240s│ 1000│ 995799│ 0│ 4257.07│ 557.98│ 87.20│ 234.90│16,928,583│ 70,535│200:995799 241s│ 1000│1000000│ 0│ 4266.06│ 557.98│ 0.79│ 234.41│17,000,000│ 70,585│200:1000000************************* 后果 stat ****************************解决协程数量: 1000申请总数(并发数*申请数 -c * -n): 1000000 总申请工夫: 240.841 秒 successNum: 1000000 failureNum: 0tp90: 279.000tp95: 296.000tp99: 348.000************************* 后果 end ****************************
Flask
、Django
等框架不在本文探讨范畴之内,这二者本就不是为了高性能设计的框架,没有比照的意义。
sanic
还有一个劣势,就是其没有开发服务器,用sanic -w 8 main.app
运行的服务器就是生产服务器。
如果有想用 Python 开发 Web 服务器的,倡议优先思考sanic
。