python在3.4引入了 asyncio 庫,3.6新增了關鍵字 async和await,此後,非同步框架迅速發展了起來,效能上能和node.js比肩,除非是cpu密集型任務,否則沒有理由不適用非同步框架。
如果你是web開發者,現在非同步web框架上有了更多選擇!
1、tornado
tornado 根本不是什麼新框架,它最初是由friendfeed(後被facebook收購)在2023年發布。從一開始就提供有非同步程式設計的功能。
tornado 不僅僅是web框架,同時它內建了很多非同步模組,可用於自己構建非同步應用。這些模組包括:
通過這些模組,tornado 構建了自己的非同步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社群中擁有很多追隨者,並且經驗豐富的架構師使用它們來構建功能強大的系統。這個框架長期以來一直在解決併發問題,但是由於它不支援wsgi標準(大部分python庫仍在同步中),因此尚未成為主流。
國內據說知乎是基於torando構建的。
2、 snaic
sanic是乙個誕生有3年的框架:它只支援3.6以上python版本,支援通用的async/await語法,開箱即用,因此你無需閱讀大量文件就可以寫出你的乙個http 處理器。
除了async關鍵字之外,語法上和 flask 基於沒差別。
from sanic import sanic
from sanic.response import json
app = sanic()
@app.route("/")
async def test(request):
return json()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
sanic可以說是python世界中最流行和最受歡迎的非同步框架。它具有你專案中需要的所有功能:路由,中介軟體,cookie,版本控制,藍圖,基於類的檢視,靜態檔案,流,sockets,此外你還可以整合模板,資料庫驅動,檔案i / o,佇列等等。
3、vibora
vibora和sanic非常像,致力於成為最快的python web伺服器。他們**首頁有乙個框架比較圖:
vibora聲稱比其它框架快幾倍,比競爭對手sanic還快兩倍多。當然,這個基準測試要持懷疑態度。
儘管在語法和功能上,vibora可以與sanic媲美但我認為sanic更加成熟,因為它已經存在了很長一段時間並且具有更大的社群。
from vibora import vibora, jsonresponse
app = vibora()
@app.route('/')
async def home():
return jsonresponse()
if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)
4、quart
如果您喜歡flask,但又要支援非同步, 那麼quart你一定會喜歡
quart符合asgi標準,該標準是wsgi標準的後繼產品,並提供非同步支援。quart不僅與flask相似,而且與flask api相容!該框架的作者希望保留了flask的風格,只是向其中新增非同步、websocket和http 2支援。因此,你可以從flask文件中學習quart的用法,只需要記住quart中的函式是非同步的就行。
from quart imporqinhhaaet quart
app = quart(__name__)
@app.route('/')
async def hello():
return 'hello'
app.run()
幾乎完全像flask
由於quart是從flask中演進過來的,因此flask的所有功能均可用:路由,中介軟體,會話,模板,藍圖等。實際上,你甚至可以直接在quart內部使用flask的擴充套件外掛程式。不過,有乙個問題是它僅支援python 3.7+。
5、fastapi
fastapi似乎是非同步 python 框架裡功能、文件最豐富的框架。
該框架的作者深入研究了其他幾個框架,從諸如django到sanic之類的現代框架,以及nestjs(node.js,typescript web框架)。
語法甚至可以說它比我們遇到的其他框架更有趣:
rom fastapi import fastapi
app = fastapi()
@app.get("/users/me")
async def read_user_me():
return
@app.get("/users/")
async def read_user(user_id: str):
return
fastapi勝過其他框架的殺手鐗列表:
自動生成api文件:編寫api介面後,你就可以使用符合標準的ui如swaggerui,redoc等來使用程式設計客棧api。程式設計客棧
那效能呢?fastapi是基於starlette庫構建的,其效能可與node相匹配,在某些情況下甚至可以與go相匹配。總而言之,我真的有一種感覺,fastapi將成為python的頂級非同步框架。
總結如今,python非同步生態正在發生很多事情。出現了新的框架,舊的框架正在重寫,很多庫開始支援非同步行為。對於web框架,python已準備就緒,可提供出色的效能。如果很長一段時間你在考慮遷移到node或者go,那現在不需要了。
基礎python5個例項運用
p int input 請輸入你的本金 r int input 請輸入利率 n int input 請輸入存的年份 amount p p 1 r nprint 本金利率和是 format amount import math r int input 請輸入球的半徑 area 4 math.pi r ...
python 5個實用的技巧
下面我挑選出的這幾個技巧常常會被人們忽略,但它們在日常程式設計中能真正的給我們帶來不少幫助。1.字典推導 dictionary comprehensions 和集合推導 set comprehensions 大多數的python程式設計師都知道且使用過列表推導 list comprehensions...
python實用寶典 python 5個實用的技巧
下面我挑選出的這幾個技巧常常會被人們忽略,但它們在日常程式設計中能真正的給我們帶來不少幫助。1.字典推導 dictionary comprehensions 和集合推導 set comprehensions 大多數的python程式設計師都知道且使用過列表推導 list comprehensions...