1. 程式人生 > >一文教你Python Web異步框架

一文教你Python Web異步框架

web 框架 wrapper aac 先來 深入 文件 異步框架 handle awesome

技術分享圖片技術分享圖片?

時間過得真快,轉眼之間已經是2019年了。好幾年前,做web開發時,我們選擇了Python的tornado框架,看重的是它的輕量級(簡潔)和異步(說實話,沒怎麽用異步)。

後來,開始用Python 3,同時也接觸了asyncio,對異步IO有了跟深入的理解和掌握。asyncio模塊提供了在單線程上通過協程實現並發的基礎框架,復用網絡sockets和其它資源上的IO訪問。簡單說,就是在讀寫網絡、文件等IO設備時通過並發來提高性能。

技術分享圖片技術分享圖片?

寫爬蟲也用asyncio替換了原來的gevent,最明顯的感觸就是,抓取速度沒有多大變化但是系統資源消耗大大減少,那麽同樣的服務器就可以大大提高抓取效率了。

異步爬蟲是在客戶端應用異步IO,同樣的,我們也可以在服務器端使用異步IO。今天,我們就聊聊Python眾多的異步IO Web 框架。

著名的github上有個代碼庫:awesome-asyncio,大家集思廣益整理了python asyncio 相關的庫。當然,也有好心的國人翻譯成了中文版: awesome-asyncio-cn。

我們先來看看其中關於Web框架部分,看看哪些著名的異步Web框架上榜了:

技術分享圖片技術分享圖片?

好家夥,數量還真不少,真是應了那句“Python就是出了名的庫多”。下面,我挑幾個比較熟悉的來介紹一下。

一、Sanic

Sanic是一個支持 async/await 語法的異步web框架,它的使用類似Flask,同時使用了基於libuv的事件循環庫uvloop,使得它的性能大大提高。

本來是想去找一下它很早之前做的一個性能對比測試,可是現在它拿掉了。因為,這個測試只是簡單的“hello world”測試,一直被人詬病。不過,官方正在著手新的性能測試,今年年初應該有個結果。

好在github有歷史記錄,把這個性能對比再拿出來看一下,當時就是看到這個結果才上了Sanic的船,不過確實沒選錯,用下來感覺還是很棒的,Web就應該和異步IO搭配才完美。

技術分享圖片技術分享圖片?

從這個結果看,Sanic確實是很誘人的。當然,一個web網站不能是簡單的“Hello Word”,更多的是後臺邏輯處理、數據庫讀寫等。

二、Tornado 框架

Tornado是Python 2時代的明星,比起Django的笨重來它更輕巧,贏得了很多人的喜愛,也包括本人。多年前,開始接觸Web開發就是從它開始的。到了Python 3 這個異步盛行的時代,Tornado 有些廉頗老矣。雖然它有異步支持,但是各種測試來看,都敵不過後起之秀的強勁。如果你現在想開始web開發,就不要用它了,去擁抱Sanic吧。

三、Japronto! 框架

先看看這個對比結果驚訝一下下吧:

技術分享圖片技術分享圖片?

為什麽秒殺所有框架,還包括Go語言的框架呢?其實,它底層都是C語言寫的,基本上就是用Python給C語言套了個盒子,高性能都來自C語言。管它怎麽實現的呢,用著爽就行了。可是,它還是一個早期開發版本,作者自己也不推薦大家用,並且還推薦大家去用Sanic。

這個框架值得關註。

四、Vibora 框架

這又是一個令人驚訝的框架,用cython(C語言)實現了很多底層的東西,所以速度也是杠杠的。雖然處於早期開發階段,但是github上已經有四千多個星星了,令人不可小覷。

這一圈了解下來,Python的異步Web框架還處在一個群雄逐鹿的戰國時代,還沒有哪一個特別出彩。這個時候選擇Sanic似乎應該不錯。

一文教你Python Web異步框架