今天小编给大家分享一下Python最快的Web框架是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

速度为先

当下,python都已经更新到了 Python3.9.3 了,如果你还没有使用过 asyncio、和 Python3.5 新增的 async/await 语法,那说明你可能真的是桃花源人,问今是何世,不知有汉,无论魏晋了。

在当下,基于 async/await 语法的异步 Web 框架也有很多,在 github 上找一找比比皆是是,那究竟应该选哪一款呢?在 github 上有一个专门测试各种语言各种 Web 框架速度的项目,我们来看一看简单的数据:

这是所有的 Python Web 框架速度测试,有人可能会问为什么不是从 1 开始排序的,因为这个项目的测试还包含 golang、java、php 等众多语言的 Web 框架,共有 226 款。这里我们只用 Python 来做对比。

可以明显的看到,flask、django、tornado 等老牌的 Python Web 框架已经快要垫底了。

wow, 这个速度绝了。可能你们还在怀疑这个速度如何测试的,给你们看一下测试源码:

#Disableallloggingfeatures
importlogging

logging.disable()


fromflaskimportFlask
frommeinheldimportpatch

patch.patch_all()

app=Flask(__name__)


@app.route("/")
defindex():
return""


@app.route("/user/<int:id>",methods=["GET"])
defuser_info(id):
returnstr(id)


@app.route("/user",methods=["POST"])
defuser():
return""
复制代码
fromdjango.httpimportHttpResponse
fromdjango.views.decorators.csrfimportcsrf_exempt


defindex(request):
returnHttpResponse(status=200)


defget_user(request,id):
returnHttpResponse(id)


@csrf_exempt
defcreate_user(request):
returnHttpResponse(status=200)
复制代码
#Disableallloggingfeatures
importlogging

logging.disable()


importtornado.httpserver
importtornado.ioloop
importtornado.web


classMainHandler(tornado.web.RequestHandler):
defget(self):
pass


classUserHandler(tornado.web.RequestHandler):
defpost(self):
pass


classUserInfoHandler(tornado.web.RequestHandler):
defget(self,id):
self.write(id)


app=tornado.web.Application(
handlers=[
(r"/",MainHandler),
(r"/user",UserHandler),
(r"/user/(\d+)",UserInfoHandler),
]
)
复制代码
#Disableallloggingfeatures
importlogging

logging.disable()

importmultiprocessing

fromsanicimportSanic
fromsanic.responseimporttext


app=Sanic("benchmark")


@app.route("/")
asyncdefindex(request):
returntext("")


@app.route("/user/<id:int>",methods=["GET"])
asyncdefuser_info(request,id):
returntext(str(id))


@app.route("/user",methods=["POST"])
asyncdefuser(request):
returntext("")


if__name__=="__main__":
workers=multiprocessing.cpu_count()
app.run(host="0.0.0.0",port=3000,workers=workers,debug=False,access_log=False)
复制代码

就是简单的不做任何操作,只返回响应,虽然这样测试没有任何实际意义,在正常的生产环境中不可能什么都不做,但是如果所有的框架都如此测试,也算是从一定程度上在同一起跑线上了吧。

OK,就这么多,说到这里你也应该知道我想要说的这个异步框架是谁了,没错,我们今天的主角就是Sanic。

为什么要用异步 Web 框架?

这可能是众多小伙伴最先想到的问题了吧?我用 Django、Flask 用的好好的,能够完成正常的任务,为什么还要用异步 Web 框架呢?

说到这里,首先我要反问你你一个问题,你认为在 Web 开发过程中我们最大的敌人是谁?思考 5 秒钟,然后看看我的回答:

在 Web 开发的过程中,我们最大的敌人不是用户,而是阻塞!

是的,而异步可以有效的解决 网络 I/O 阻塞,文件 I/O 阻塞。具体的阻塞相关的文章推荐查看深入理解 Python 异步编程。由于异步可以提升效率,所以对于 Python 来说,异步是最好的提升性能的方式之一。这也是为什么要选择 异步 Web 框架的原因。

生态环境

可能有的小伙伴还是会说,你为什么不推荐 falcon 而是推荐 Sanic ?明明它的速度非常快,要比 Sanic 快了那么多,那您看一下下面的代码:

fromwsgiref.simple_serverimportmake_server
importfalcon


classThingsResource:
defon_get(self,req,resp):
"""HandlesGETrequests"""
resp.status=falcon.HTTP_200#Thisisthedefaultstatus
resp.content_type=falcon.MEDIA_TEXT#DefaultisJSON,sooverride
resp.text=('\nTwothingsawememost,thestarrysky'
'abovemeandthemorallawwithinme.\n'
'\n'
'~ImmanuelKant\n\n')

app=falcon.App()

things=ThingsResource()

app.add_route('/things',things)

if__name__=='__main__':
withmake_server('',8000,app)ashttpd:
print('Servingonport8000...')

httpd.serve_forever()

一个状态码都要自己定义和填写的框架,我想它的速度快是值得肯定的,但是对于开发者来说,又有多少的实用价值呢?所以我们选择框架并不是要选最快的,而是要又快又好用的。

而大多数框架并不具备这样的生态环境,这应该也是为什么大多数 Python 的 Web 开发者愿意选择 Django 、 Flask 、 tornado 的原因。就是因为它们的生态相对于其他框架要丰富太多太多。

可是,如今不一样了。Sanic 框架, 从 2016 年 5 月开始 发布了第一版异步 Web 框架雏形,至今已经走过了 5 个年头,这 5 年,经过不断地技术积累,Sanic 已经由一个步履蹒跚的小框架变成了一个健步如飞的稳重框架。

在 awesome-sanic 项目中,记录了大量的第三方库,你可以找到任何常用的工具:从 API 到 Authentication,从 Development 到 Frontend,从 Monitoring 到 ORM,从 Caching 到 Queue… 只有你想不到的,没有它没有的第三方拓展。

以上就是“Python最快的Web框架是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。