python 5個(gè)頂級(jí)異步框架推薦
Python在3.4引入了 asyncio 庫(kù),3.6新增了關(guān)鍵字 async和await,此后,異步框架迅速發(fā)展了起來(lái),性能上能和Node.js比肩,除非是CPU密集型任務(wù),否則沒(méi)有理由不適用異步框架。
如果你是Web開(kāi)發(fā)者,現(xiàn)在異步Web框架上有了更多選擇!
1、Tornado
Tornado 根本不是什么新框架,它最初是由FriendFeed(后被Facebook收購(gòu))在2009年發(fā)布。從一開(kāi)始就提供有異步編程的功能。
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ù)器和客戶(hù)端(tornado.httpserver,tornado.httpclient,等)通過(guò)這些模塊,Tornado 構(gòu)建了自己的異步Web框架模塊。
import tornado.ioloopimport tornado.webclass 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ā)問(wèn)題,但是由于它不支持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ǔ)法,開(kāi)箱即用,因此你無(wú)需閱讀大量文檔就可以寫(xiě)出你的一個(gè)HTTP 處理器。
除了async關(guān)鍵字之外,語(yǔ)法上和 flask 基于沒(méi)差別。
from sanic import Sanicfrom sanic.response import jsonapp = 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)圖,基于類(lèi)的視圖,靜態(tài)文件,流,sockets,此外你還可以集成模板,數(shù)據(jù)庫(kù)驅(qū)動(dòng),文件I / O,隊(duì)列等等。
3、Vibora
Vibora和Sanic非常像,致力于成為最快的Python Web服務(wù)器。他們網(wǎng)站首頁(yè)有一個(gè)框架比較圖:
Vibora聲稱(chēng)比其它框架快幾倍,比競(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, JsonResponseapp = 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ì)喜歡
Quart符合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 Quartapp = Quart(__name__)@app.route(’/’)async def hello(): return ’hello’app.run()
幾乎完全像Flask
由于Quart是從Flask中演進(jìn)過(guò)來(lái)的,因此Flask的所有功能均可用:路由,中間件,會(huì)話(huà),模板,藍(lán)圖等。實(shí)際上,你甚至可以直接在Quart內(nèi)部使用Flask的擴(kuò)展插件。不過(guò),有一個(gè)問(wèn)題是它僅支持Python 3.7+。
5、FastAPI
FastAPI似乎是異步 Python 框架里功能、文檔最豐富的框架。
該框架的作者深入研究了其他幾個(gè)框架,從諸如Django到Sanic之類(lèi)的現(xiàn)代框架,以及NestJS(Node.js,Typescript Web框架)。
語(yǔ)法甚至可以說(shuō)它比我們遇到的其他框架更有趣:
rom fastapi import FastAPIapp = 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勝過(guò)其他框架的殺手锏列表:
自動(dòng)生成API文檔:編寫(xiě)API接口后,你就可以使用符合標(biāo)準(zhǔn)的UI如SwaggerUI,ReDoc等來(lái)使用API。
那性能呢?FastAPI是基于Starlette庫(kù)構(gòu)建的,其性能可與Node相匹配,在某些情況下甚至可以與Go相匹配。總而言之,我真的有一種感覺(jué),F(xiàn)astAPI將成為Python的頂級(jí)異步框架。
總結(jié)
如今,Python異步生態(tài)正在發(fā)生很多事情。出現(xiàn)了新的框架,舊的框架正在重寫(xiě),很多庫(kù)開(kāi)始支持異步行為。對(duì)于Web框架,Python已準(zhǔn)備就緒,可提供出色的性能。如果很長(zhǎng)一段時(shí)間你在考慮遷移到Node或者go,那現(xiàn)在不需要了。
原文參考連接:https://geekflare.com/python-asynchronous-web-frameworks/
以上就是python 5個(gè)頂級(jí)異步框架推薦的詳細(xì)內(nèi)容,更多關(guān)于python 異步框架的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)2. CSS可以做的幾個(gè)令你嘆為觀(guān)止的實(shí)例分享3. Xml簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理4. 解析原生JS getComputedStyle5. ASP基礎(chǔ)知識(shí)Command對(duì)象講解6. Spring注入Date類(lèi)型的三種方法總結(jié)7. ASP動(dòng)態(tài)網(wǎng)頁(yè)制作技術(shù)經(jīng)驗(yàn)分享8. PHP session反序列化漏洞超詳細(xì)講解9. ASP基礎(chǔ)入門(mén)第二篇(ASP基礎(chǔ)知識(shí))10. ASP實(shí)現(xiàn)加法驗(yàn)證碼
