溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python最快的Web框架是什么

發(fā)布時間:2022-02-21 15:53:01 來源:億速云 閱讀:206 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Python最快的Web框架是什么的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

速度為先

當(dāng)下,python都已經(jīng)更新到了 Python3.9.3 了,如果你還沒有使用過 asyncio、和 Python3.5 新增的 async/await 語法,那說明你可能真的是桃花源人,問今是何世,不知有漢,無論魏晉了。

在當(dāng)下,基于 async/await 語法的異步 Web 框架也有很多,在 github 上找一找比比皆是是,那究竟應(yīng)該選哪一款呢?在 github 上有一個專門測試各種語言各種 Web 框架速度的項(xiàng)目,我們來看一看簡單的數(shù)據(jù):

這是所有的 Python Web 框架速度測試,有人可能會問為什么不是從 1 開始排序的,因?yàn)檫@個項(xiàng)目的測試還包含 golang、java、php 等眾多語言的 Web 框架,共有 226 款。這里我們只用 Python 來做對比。

可以明顯的看到,flask、django、tornado 等老牌的 Python Web 框架已經(jīng)快要墊底了。

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 ""
復(fù)制代碼
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)
復(fù)制代碼
# 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),
    ]
)
復(fù)制代碼
# 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)
復(fù)制代碼

就是簡單的不做任何操作,只返回響應(yīng),雖然這樣測試沒有任何實(shí)際意義,在正常的生產(chǎn)環(huán)境中不可能什么都不做,但是如果所有的框架都如此測試,也算是從一定程度上在同一起跑線上了吧。

OK,就這么多,說到這里你也應(yīng)該知道我想要說的這個異步框架是誰了,沒錯,我們今天的主角就是 Sanic。

為什么要用異步 Web 框架?

這可能是眾多小伙伴最先想到的問題了吧?我用 Django、Flask 用的好好的,能夠完成正常的任務(wù),為什么還要用異步 Web 框架呢?

說到這里,首先我要反問你你一個問題,你認(rèn)為在 Web 開發(fā)過程中我們最大的敵人是誰?思考 5 秒鐘,然后看看我的回答:

在 Web 開發(fā)的過程中,我們最大的敵人不是用戶,而是阻塞!

是的,而異步可以有效的解決 網(wǎng)絡(luò) I/O 阻塞,文件 I/O 阻塞。具體的阻塞相關(guān)的文章推薦查看深入理解 Python 異步編程。由于異步可以提升效率,所以對于 Python 來說,異步是最好的提升性能的方式之一。這也是為什么要選擇 異步 Web 框架的原因。

生態(tài)環(huán)境

可能有的小伙伴還是會說,你為什么不推薦 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()

一個狀態(tài)碼都要自己定義和填寫的框架,我想它的速度快是值得肯定的,但是對于開發(fā)者來說,又有多少的實(shí)用價值呢?所以我們選擇框架并不是要選最快的,而是要又快又好用的。

而大多數(shù)框架并不具備這樣的生態(tài)環(huán)境,這應(yīng)該也是為什么大多數(shù) Python 的 Web 開發(fā)者愿意選擇 Django 、 Flask 、 tornado 的原因。就是因?yàn)樗鼈兊纳鷳B(tài)相對于其他框架要豐富太多太多。

可是,如今不一樣了。Sanic 框架, 從 2016 年 5 月開始 發(fā)布了第一版異步 Web 框架雛形,至今已經(jīng)走過了 5 個年頭,這 5 年,經(jīng)過不斷地技術(shù)積累,Sanic 已經(jīng)由一個步履蹣跚的小框架變成了一個健步如飛的穩(wěn)重框架。

在 awesome-sanic 項(xiàng)目中,記錄了大量的第三方庫,你可以找到任何常用的工具:從 API 到 Authentication,從 Development 到 Frontend,從 Monitoring 到 ORM,從 Caching 到 Queue… 只有你想不到的,沒有它沒有的第三方拓展。

以上就是“Python最快的Web框架是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI