Python中最强的Web框架不再是Django和Flask。一种框架。可能经常逛github的朋友也会说一个fastapi。但是,陛下,时代变了,清朝……已经死了!!!速度优先。目前python已经更新到Python3.9.3。如果你没有用过asyncio和Python3.5新的async/await语法,说明你可能真的是桃花源出身。现在的世界是什么?,不知有无汉,不分魏晋。目前有很多基于async/await语法的异步web框架。你在github上到处都能找到它们,那么你应该选择哪一个呢?github上有一个项目,测试各种语言的各种web框架的速度。简单看一下数据:这是对所有Pythonweb框架的速度测试。可能有人会问为什么不从1开始排序,因为这个项目的测试还包括golang、java、php等多种语言的web框架,一共226个模型。这里我们只使用Python来进行比较。可以明显看出,flask、django、tornado等老牌的Pythonweb框架几乎垫底。哇,这速度绝对是惊人的。也许你还在疑惑如何测试这个速度,我给你看一下测试源码:route("/")defindex():返回""@app.route("/user/",methods=["GET"])defuser_info(id):returnstr(id)@app.route("/user",methods=["POST"])defuser():return""fromdjango.httpimportHttpResponsefromdjango.views.decorators.csrfimportcsrf_exemptdefindex(request):returnHttpResponse(status=200)defget_user(request,id):returnHttpResponse(id)@csrf_exemptdefcreate_user(request):returnHttpResponse(status=200)复制代码#禁用所有日志记录功能importlogginglogging.disable()importtornado.httpserverimporttornado.ioloopimporttornado.ioloopimportmainandweb。(tornado.web.RequestHandler):defget(self):passclassUserHandler(tornado.web.RequestHandler):defpost(self):passclassUserInfoHandler(tornado.web.RequestHandlerer):defget(self,id):self.write(id)app=tornado.web.Application(handlers=[(r"/",MainHandler),(r"/user",UserHandler),(r"/user/(\d+)",UserInfoHandler),])复制代码#禁用所有日志功能")asyncdefindex(request):returntext("")@app.route("/user/",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)复制代码根本什么都不做,只返回响应,虽然这里没有实际测试way的意思,在正常的生产环境下是不可能什么都不做的,但是如果所有的框架都这样测试的话,也可以认为是在同一个start上荷兰国际集团线在一定程度上。我要说的异步框架是谁?没错,我们今天的主角就是山尼奇**。为什么要使用异步Web框架?这可能是很多小伙伴首先想到的问题吧?我用Django和Flask都很好,能完成正常任务,为什么要用异步web框架?说到这里,首先我想问你一个问题。你认为谁是我们在web开发过程中最大的敌人?思考5秒钟,然后阅读我的答案:在Web开发中,我们最大的敌人不是用户,而是阻塞!是的,而且异步可以有效解决网络I/O阻塞和文件I/O阻塞。具体阻塞相关的文章,推荐查看深入理解Python异步编程。既然异步可以提高效率,那么对于Python来说,异步是提升性能最好的方式之一。这就是您应该选择异步Web框架的原因。有的生态环境小伙伴可能还会说,你为什么不推荐falcon而是推荐Sanic呢?显然它的速度非常快,比Sanic快那么多,那你可以看下面的代码:fromwsgiref.simple_serverimportmake_serverimportfalconclassThingsResource:defon_get(self,req,resp):"""HandlesGETrequests"""resp.status=falcon.HTTP_200#这是默认状态resp.content_type=falcon.MEDIA_TEXT#默认是JSON,所以重写resp.text=('\n有两件事最让我敬畏,星空''在我头顶和寓意我内心的法则。\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()必须自己定义并填写一个状态码。我觉得它的速度快是值得肯定的,但是对于开发者来说,又有多少实用价值呢?所以我们选择框架不是为了选择最快的,而是为了快速好用。大多数框架都不具备这样的生态环境,这应该也是大多数Pythonweb开发者愿意选择Django、Flask、tornado的原因。就是因为他们的生态要比其他框架丰富的多。然而,现在不同了。Sanic框架,自2016年5月起,发布了第一版异步Web框架的雏形。从那以后已经5年了。5年来,通过不断的技术积累,Sanic从一个步履蹒跚的小框架,变成了一个行走如飞的坚实框架。在awesome-sanic项目中,记录了大量的第三方库,你可以找到任何常用的工具:从API到Authentication,从Development到Frontend,从Monitoring到ORM,从Caching到Queue……只有你想不到的,没有它没有第三方扩展。生产环境以前看到国内社区有小伙伴问2020年生产环境能用Sanic吗?答案是肯定的,笔者以亲身经历为证,从2019年底开始,我们就一直在生产环境中使用Sanic。当时Sanic还是19.9,笔者体验了Sanic从19.9到21.3的所有Sanic版本,看到Sanic的生态环境越来越好。还有一个问题你可能不知道。Sanic在创建之初的目标是创建一个可以在生产环境中使用的Web框架。有些框架可能会明确声明内置的Run方法只在测试环境下使用,对于部署环境不要使用内置的Run方法。但是Sanic创建的不仅仅是一个测试环境的应用,而是一个可以直接在生产环境中使用的应用。省去使用独角兽等部署的麻烦!有据可查。大多数PythonWeb开发人员学习的第一个框架是Flask或Django,尤其是Django文档。我想大部分朋友看完之后都会感到沮丧。因为老版本有中文,但是新版本,尤其是新特性,根本就没有中文文档!!!!这对于关注Django开发但英语不是强项的同学来说简直惨不忍睹。但Sanic有完整的中文用户指南和API文档,由贡献者独立发起,官方认可的文档,由译者翻译贡献,由Sanic官方团队发布。可能有朋友会说,Flask也有完整的中文文档,只是在不同的站点。Sanic的所有文档均由Sanic官方发布。并且目前Sanic还在继续支持韩语、葡萄牙语等更多语言。社区指导不同于其他框架。论坛、频道等百度或许能找到,但这些都是本地化的,而且运营商往往不是官方的,里面夹杂着很多广告。显然,如果是官方运营,是不可能的允许这种情况发生。Sanic与其他社区不同的是,所有的论坛和频道都是完全官方运营的。在这里,你可以向核心开发者提问,Sanic的官方发布经理也很乐意解答各种问题。您还可以与志同道合的用户分享您的经验。这是一个完全开放的环境……Sanic目前使用论坛、Discord、githubissues、twitter和Stackoverflow。您可以通过以上方式关注Sanic的发展,寻求社区帮助。你在等什么?何不赶快试试看呢?最后,它以Sanic的愿景结束:构建更快,运行更??快!Python进阶笔记,最新面试复习笔记PDF,还有你在我GitHub文章末尾的点赞和收藏,是对我最大的鼓励!欢迎关注我,分享Python干货,交流Python技术。如果大家对文章有什么见解,或者有什么技术问题,欢迎在评论区留言讨论!