一文教你Python Web異步框架



 

時間過得真快,轉眼之間已經是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似乎應該不錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM