1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        5個(gè)頂級(jí)異步Python框架

        共 3394字,需瀏覽 7分鐘

         ·

        2020-01-06 23:23

        
         

        點(diǎn)擊上方Python知識(shí)圈,選擇設(shè)為星標(biāo)

        回復(fù)1024獲取Python資料


        0959fd94c91ca43e5a8d44096cd4e28a.webp

        閱讀文本大概需要 6 分鐘

        Python在3.4引入了 asyncio 庫(kù),3.6新增了關(guān)鍵字 asyncawait,此后,異步框架迅速發(fā)展了起來(lái),性能上能和Node.js比肩,除非是CPU密集型任務(wù),否則沒有理由不適用異步框架。

        如果你是Web開發(fā)者,現(xiàn)在異步Web框架上有了更多選擇!

        1、Tornado

        Tornado 根本不是什么新框架,它最初是由FriendFeed(后被Facebook收購(gòu))在2009年發(fā)布。從一開始就提供有異步編程的功能。 7b3cfdf769003505ebfb25da40a7d781.webp
        Tornado 不僅僅是Web框架,同時(shí)它內(nèi)置了很多異步模塊,可用于自己構(gòu)建異步應(yīng)用。這些模塊包括:
        • 協(xié)同程序和其他原語(yǔ)(tornado.gen,tornado.locks,tornado.queues等)
        • 網(wǎng)絡(luò)模塊(tornado.ioloop,tornado.iostream)
        • 異步服務(wù)器和客戶端(tornado.httpserver,httpclient,等)

        通過這些模塊,Tornado 構(gòu)建了自己的異步Web框架模塊。
        import tornado.ioloop
        import tornado.web

        class MainHandler(tornado.web.RequestHandler):
        def get(self):
        self.write("Hello, world")

        def make_app():
        return tornado.web.Application([
        (r"/", MainHandler),
        ])

        if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()
        Tornado在Python社區(qū)中擁有很多追隨者,并且經(jīng)驗(yàn)豐富的架構(gòu)師使用它們來(lái)構(gòu)建功能強(qiáng)大的系統(tǒng)。這個(gè)框架長(zhǎng)期以來(lái)一直在解決并發(fā)問題,但是由于它不支持WSGI標(biāo)準(zhǔn)(大部分Python庫(kù)仍在同步中),因此尚未成為主流。國(guó)內(nèi)據(jù)說(shuō)知乎是基于Torando構(gòu)建的。

        2、 Snaic

        Sanic是一個(gè)誕生有3年的框架:它只支持3.6以上Python版本,支持通用的async / await語(yǔ)法,開箱即用,因此你無(wú)需閱讀大量文檔就可以寫出你的一個(gè)HTTP 處理器。 b35bd150da588b66896bac3e58d89a70.webp除了async關(guān)鍵字之外,語(yǔ)法上和 flask 基于沒差別。
        from sanic import Sanic
        from sanic.response import json

        app = Sanic()

        @app.route("/")
        async def test(request):
        return json({"hello": "world"})

        if __name__ == "__main__":
        app.run(host="0.0.0.0", port=8000)
        Sanic可以說(shuō)是Python世界中最流行和最受歡迎的異步框架。它具有你項(xiàng)目中需要的所有功能:路由,中間件,Cookie,版本控制,藍(lán)圖,基于類的視圖,靜態(tài)文件,流,sockets,此外你還可以集成模板,數(shù)據(jù)庫(kù)驅(qū)動(dòng),文件I / O,隊(duì)列等等。

        3、Vibora

        Vibora和Sanic非常像,致力于成為最快的Python Web服務(wù)器。他們網(wǎng)站首頁(yè)有一個(gè)框架比較圖: 1ec85aa5c17d30e493601e87d01bc213.webp
        Vibora聲稱比其它框架快幾倍,比競(jìng)爭(zhēng)對(duì)手Sanic還快兩倍多。
        當(dāng)然,這個(gè)基準(zhǔn)測(cè)試要持懷疑態(tài)度。盡管在語(yǔ)法和功能上,Vibora可以與Sanic媲美但我認(rèn)為Sanic更加成熟,因?yàn)樗呀?jīng)存在了很長(zhǎng)一段時(shí)間并且具有更大的社區(qū)。
        from vibora import Vibora, JsonResponse

        app = Vibora()

        @app.route('/')
        async def home():
        return JsonResponse({'hello': 'world'})

        if __name__ == '__main__':
        app.run(host="0.0.0.0", port=8000)

        4、Quart

        如果您喜歡Flask,但又要支持異步, 那么Quart你一定會(huì)喜歡 1fc5ab507ac22ebe89cca5543687881c.webpQuart符合ASGI標(biāo)準(zhǔn),該標(biāo)準(zhǔn)是WSGI標(biāo)準(zhǔn)的后繼產(chǎn)品,并提供異步支持。Quart不僅與Flask相似,而且與Flask API兼容!該框架的作者希望保留了Flask的風(fēng)格,只是向其中添加異步、WebSocket和HTTP 2支持。因此,你可以從Flask文檔中學(xué)習(xí)Quart的用法,只需要記住Quart中的函數(shù)是異步的就行。
        from quart import Quart

        app = Quart(__name__)

        @app.route('/')
        async def hello():
        return 'hello'

        app.run()
        幾乎完全像Flask由于Quart是從Flask中演進(jìn)過來(lái)的,因此Flask的所有功能均可用:路由,中間件,會(huì)話,模板,藍(lán)圖等。實(shí)際上,你甚至可以直接在Quart內(nèi)部使用Flask的擴(kuò)展插件。不過,有一個(gè)問題是它僅支持Python 3.7+。

        5、FastAPI

        FastAPI似乎是異步 Python 框架里功能、文檔最豐富的框架。 1aeae7ea0c6a31c06664b910910f0f03.webp該框架的作者深入研究了其他幾個(gè)框架,從諸如Django到Sanic之類的現(xiàn)代框架,以及NestJS(Node.js,Typescript Web框架)。語(yǔ)法甚至可以說(shuō)它比我們遇到的其他框架更有趣:
        rom fastapi import FastAPI

        app = FastAPI()

        @app.get("/users/me")
        async def read_user_me():
        return {"user_id": "the current user"}

        @app.get("/users/{user_id}")
        async def read_user(user_id: str):
        return {"user_id": user_id}
        FastAPI勝過其他框架的殺手锏,自動(dòng)生成API文檔:編寫API接口后,你就可以使用符合標(biāo)準(zhǔn)的UI如SwaggerUI,ReDoc等來(lái)使用API。

        563945fba7d82aae85994a3e6066df05.webp



        那性能呢?FastAPI是基于Starlette庫(kù)構(gòu)建的,其性能可與Node相匹配,在某些情況下甚至可以與Go相匹配。總而言之,我真的有一種感覺,F(xiàn)astAPI將成為Python的頂級(jí)異步框架。

        總結(jié)

        如今,Python異步生態(tài)正在發(fā)生很多事情。出現(xiàn)了新的框架,舊的框架正在重寫,很多庫(kù)開始支持異步行為。對(duì)于Web框架,Python已準(zhǔn)備就緒,可提供出色的性能。如果很長(zhǎng)一段時(shí)間你在考慮遷移到Node或者go,那現(xiàn)在不需要了。參考鏈接:https://geekflare.com/python-asynchronous-web-frameworks/今日討論:你目前在用什么框架?

        aa4ac895d2c323823ebf6abaa635dbf9.webp

        -----------------------公眾號(hào):Python知識(shí)圈(ID:PythonCircle博客:www.pyzhishiquan.com知乎:Python知識(shí)圈bilibili:菜鳥程序員的日常

        一個(gè)學(xué)習(xí)Python的人,喜歡分享,喜歡搞事情!長(zhǎng)按下圖二維碼關(guān)注,和你一起領(lǐng)悟Python的魅力。
        
         


        Python知識(shí)圈公眾號(hào)的交流群已經(jīng)建立,群里可以領(lǐng)取 Python 和人工智能學(xué)習(xí)資料,大家可以一起學(xué)習(xí)交流,效率更高,如果是想發(fā)推文、廣告、砍價(jià)小程序的敬請(qǐng)繞道!一定記得備注「交流學(xué)習(xí)」,我會(huì)盡快通過好友申請(qǐng)哦!通過好友后私聊我「學(xué)習(xí)資料」或者「進(jìn)群」都可以。

        掃碼添加,備注:交流學(xué)習(xí)




        往期推薦01

        10行代碼制作群聊提醒小助手,再也不怕漏掉消息了

        02

        收藏的60個(gè)Chrome神器插件,全部分享給你,助你快速成為老司機(jī)

        03

        終于有人做出了比百度好用N倍的搜索引擎!


        分享給你的朋友

        點(diǎn)個(gè)在看

        f0fd32c25dbef612655d663e874159c5.webp

        瀏覽 64
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久久久久免费毛片 | 亚洲激情视频网 | 美女巨乳图片 | 色久伊人 | 天天综合—永久入口 | 鲁一鲁色 | 情趣乱伦视频 | 亚洲精品一二三 | 女人高潮一级片 | 国产黄色一级毛片 |