来自:掘金,作者:ConnorZhang

链接:https://juejin.cn/post/6944598601674784775

如果说要用 Python 进行 web 开发,我想你一定会告诉我 使用 Flask 或者 Django 再或者 tornado, 用来用去无非就这三种框架。可能逛 github 多的朋友还会说一个 fastapi。但是,皇上,时代变了,大清… 亡了!!!

速度为先

当下,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, 这个速度绝了。可能你们还在怀疑这个速度如何测试的,给你们看一下测试源码:

# Disable all logging features
import logginglogging.disable()from flask import Flask
from meinheld import patchpatch.patch_all()app = Flask(__name__)@app.route("/")
def index():return ""@app.route("/user/<int:id>", methods=["GET"])
def user_info(id):return str(id)@app.route("/user", methods=["POST"])
def user():return ""
复制代码
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exemptdef index(request):return HttpResponse(status=200)def get_user(request, id):return HttpResponse(id)@csrf_exempt
def create_user(request):return HttpResponse(status=200)
复制代码
# Disable all logging features
import logginglogging.disable()import tornado.httpserver
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):passclass UserHandler(tornado.web.RequestHandler):def post(self):passclass UserInfoHandler(tornado.web.RequestHandler):def get(self, id):self.write(id)app = tornado.web.Application(handlers=[(r"/", MainHandler),(r"/user", UserHandler),(r"/user/(\d+)", UserInfoHandler),]
)
复制代码
# Disable all logging features
import logginglogging.disable()import multiprocessingfrom sanic import Sanic
from sanic.response import textapp = Sanic("benchmark")@app.route("/")
async def index(request):return text("")@app.route("/user/<id:int>", methods=["GET"])
async def user_info(request, id):return text(str(id))@app.route("/user", methods=["POST"])
async def user(request):return text("")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 快了那么多,那您看一下下面的代码:

from wsgiref.simple_server import make_server
import falconclass ThingsResource:def on_get(self, req, resp):"""Handles GET requests"""resp.status = falcon.HTTP_200  # This is the default statusresp.content_type = falcon.MEDIA_TEXT  # Default is JSON, so overrideresp.text = ('\nTwo things awe me most, the starry sky ''above me and the moral law within me.\n''\n''    ~ Immanuel Kant\n\n')app = falcon.App()things = ThingsResource()app.add_route('/things', things)if __name__ == '__main__':with make_server('', 8000, app) as httpd:print('Serving on port 8000...')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… 只有你想不到的,没有它没有的第三方拓展。

生产环境

以前我在国内的社区中看到过一些小伙伴在问 2020 年了,Sanic 可以用于生产环境了吗?

答案是肯定的,笔者以亲身经历来作证,从19年底,我们就已经将 Sanic 用于生产环境了。彼时的 Sanic 还是 19.9,笔者经历了 Sanic 19.9 -- 21.3 所有的 Sanic 的版本,眼看着 Sanic 的生态环境变得越来越棒。

还有一个问题可能你们不知道,Sanic 在创建之初目标就是创建一个可以用于生产环境的 Web 框架。可能有些框架会明确的说明框架中自带的 Run 方法仅用于测试环境,不要使用自带的 Run 方法用于部署环境。但是 Sanic 所创建的不止是一个用于测试环境的应用,更是可以直接用在生产环境中的应用。省去了使用 unicorn 等部署的烦恼!

文档完善

想必大多数 Python 的 Web 开发者 学的第一个框架就是 Flask 或者 Django 吧,尤其是 Django 的文档,我想大多数小伙伴看了都会心塞。因为旧的版本有中文,但是新的版本,尤其是新特性,完全没有任何中文文档了!!!!这对于关注 Django 发展但英文又不是强项的同学来说,简直苦不堪言。

但 Sanic 拥有完善的 中文用户指南 和 API 文档,这些都是由贡献者自主发起的,官方承认的文档,由翻译者进行翻译贡献,由 Sanic 官方团队进行发布。或许有的小伙伴会说 Flask 也有完善的中文文档,但是那是在不同的站点上的,Sanic 的所有文档都有 Sanic 官方进行发布支持。且目前 Sanic 还在持续支持 韩语、葡萄牙语等更多的语种。

社区指导

和其他框架不同,您或许能够在百度上找到论坛、频道等,但这些都是经过本地汉化的,运营者往往并不是官方,且其中夹杂了很多广告。很显然,如果是官方运营的不可能允许这种情况出现。

Sanic 不同于其他的社区,所有的论坛、频道完全由官方运营,在这里,你可以向核心开发者提问问题,Sanic 的官方发布经理也非常乐意回答各种问题。你也可以和志同道合的使用者分享自己的使用经验。这是一个完全开放的环境….

Sanic 目前常用的有 论坛、Discord、github issues、twitter、Stackoverflow

大家可以在以上的方式中关注 Sanic 的发展以及寻求社区帮助。

你还在等什么?还不赶紧去试一下?最后,以 Sanic 的愿景结尾:Build Faster, Run Faster !

推荐阅读:入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|年度爆款文案1).卧槽!Pdf转Word用Python轻松搞定!2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 4).80行代码!用Python做一个哆来A梦分身 5).你必须掌握的20个python代码,短小精悍,用处无穷 6).30个Python奇淫技巧集 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 8).再见Python!我要学Go了!2500字深度分析!9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片点阅读原文,领AI全套资料!

Python 里最强的Web框架,早就不是Django和Flask了相关推荐

  1. Python学习-基础篇14 Web框架本质及第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  2. python学习随笔--web框架

    Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

  3. Flask 框架 是 Python 中最流行的 Web 框架之一

    Flask 是 Python 中最流行的 Web 框架之一,以小巧.灵活.可扩展性强著称, 熟练掌握Flask 框架,深入解析Flask 框架的精髓,希望掌握Flask 最佳实践项目. Flask W ...

  4. python框架django书籍_有Python基础,刚接触web框架的Django初学者。

    本文面向:有Python基础,刚接触web框架的Django初学者. 环境:windows7 python3.5.1 pycharm Django 1.10版 pip3 一.Django简介 百度百科 ...

  5. Python全栈开发:web框架们

    Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. 1 2 3 ...

  6. Python 里最强的地图绘制神器

    今天给大家介绍一个非常 NB 的Python 库,专门用来绘制地图的,它叫 Folium . 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...

  7. 这可能是Python里最强的绘制地图神器

    今天给大家介绍一个非常 NB 的Python 库,专门用来绘制地图的,它叫 Folium . 1. Folium简介 Folium是一个基于leaflet.js的Python地图库,其中,Leafle ...

  8. python twisted和flask_浅谈Python Web 框架:Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid...

    Django 是一个高级的 Python Web 框架,支持快速开发,简洁.实用的设计.如果你正在建一个和电子商务网站相似的应用,那你应该选择用 Django 框架.它能使你快速完成工作,也不必担心太 ...

  9. python web框架之Tornado

    说Tornado之前分享几个前端不错的网站: -- Bootstraphttp://www.bootcss.com/-- Font Awesomehttp://fontawesome.io/-- bx ...

最新文章

  1. [备忘]使用wcf联合服务
  2. C 如何对指针进行指定字节的偏置操作
  3. 中国石油大学(华东)计算机科学与技术,2017年中国石油大学(华东)函授本科计算机科学与技术专业...
  4. MobileNetV1
  5. 目标检测论文阅读:Multi-scale Location-aware Kernel Representation for Object Detection(CVPR2018)
  6. 动态时间规整算法(DTW)通俗易懂
  7. git小乌龟安装_ROS系统安装与体验
  8. 标准正态分布怎么算_标准正态分布表怎么看
  9. Burp Suite —— 验证码识别、切换IP
  10. JAVA面向对象之对象和类
  11. ssci源刊里有开源期刊吗_ssci源刊里有开源期刊吗_啥是核心期刊?啥是北核啥是南核?啥是国家级?啥又是省级?都给你整明白......
  12. R语言实战笔记后续修改
  13. 现场直播:域名转出的黑幕和愤怒!(商务中国BIZCN和美橙互联CNDNS)
  14. ArcGIS:计算土地转移矩阵
  15. 股票交易接口Java Serializable接口实现问题?
  16. 网站站内seo优化简介
  17. PLC通讯实现-C#实现AB5000 PLC串口通讯DTL32(七)
  18. 自动化测试之Appium
  19. 树莓派 linux hook,树莓派制造日视/夜视串流直播摄像头
  20. 游戏数值策划入门介绍

热门文章

  1. 单元测试之assert验证
  2. python recvfrom函数详解_recvfrom()未接收任何数据python
  3. 线性代数:增广矩阵学习笔记
  4. Python异步解析主流视频网站视频信息框架
  5. 人生就是一个不断妥协的过程
  6. kettle使用、kettle新建转换、kettle新建作业
  7. 优派VX2778-2K-HD-2 评测
  8. 保姆级| 无法定位序数242于动态链接库| pythonTensorflow报错的解决方案
  9. 胡莱三国2服务器维护,不想说再见《胡莱三国2》安卓首测完美收官
  10. android vsync,Vsync同步机制 一