关于python:Python-里最强的Web框架早就不是Django和Flask了

44次阅读

共计 4497 个字符,预计需要花费 12 分钟才能阅读完成。

如果说要用 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 logging

logging.disable()


from flask import Flask
from meinheld import patch

patch.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_exempt


def 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 logging

logging.disable()


import tornado.httpserver
import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        pass


class UserHandler(tornado.web.RequestHandler):
    def post(self):
        pass


class 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 logging

logging.disable()

import multiprocessing

from sanic import Sanic
from sanic.response import text


app = 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 falcon


class ThingsResource:
    def on_get(self, req, resp):
        """Handles GET requests"""
        resp.status = falcon.HTTP_200  # This is the default status
        resp.content_type = falcon.MEDIA_TEXT  # Default is JSON, so override
        resp.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 进阶笔记、最新面试温习笔记 PDF,我的 GitHub

文末

您的点赞珍藏就是对我最大的激励!
欢送关注我,分享 Python 干货,交换 Python 技术。
对文章有何见解,或者有何技术问题,欢送在评论区一起留言探讨!

正文完
 0