時間過得真快,轉眼之間已是2019年了。好幾年前,作web開發時,咱們選擇了Python的tornado框架,看重的是它的輕量級(簡潔)和異步(說實話,沒怎麼用異步)。python
後來,開始用Python 3,同時也接觸了asyncio,對異步IO有了跟深刻的理解和掌握。asyncio模塊提供了在單線程上經過協程實現併發的基礎框架,複用網絡sockets和其它資源上的IO訪問。簡單說,就是在讀寫網絡、文件等IO設備時經過併發來提升性能。git
寫爬蟲也用asyncio替換了原來的gevent,最明顯的感觸就是,抓取速度沒有多大變化可是系統資源消耗大大減小,那麼一樣的服務器就能夠大大提升抓取效率了。github
異步爬蟲是在客戶端應用異步IO,一樣的,咱們也能夠在服務器端使用異步IO。今天,咱們就聊聊Python衆多的異步IO Web 框架。web
著名的github上有個代碼庫:awesome-asyncio,你們集思廣益整理了python asyncio 相關的庫。固然,也有好心的國人翻譯成了中文版: awesome-asyncio-cn。數據庫
咱們先來看看其中關於Web框架部分,看看哪些著名的異步Web框架上榜了:服務器
好傢伙,數量還真很多,真是應了那句「Python就是出了名的庫多」。下面,我挑幾個比較熟悉的來介紹一下。網絡
Sanic是一個支持 async/await 語法的異步web框架,它的使用相似Flask,同時使用了基於libuv的事件循環庫uvloop,使得它的性能大大提升。併發
原本是想去找一下它很早以前作的一個性能對比測試,但是如今它拿掉了。由於,這個測試只是簡單的「hello world」測試,一直被人詬病。不過,官方正在着手新的性能測試,今年年初應該有個結果。app
好在github有歷史記錄,把這個性能對比再拿出來看一下,當時就是看到這個結果才上了Sanic的船,不過確實沒選錯,用下來感受仍是很棒的,Web就應該和異步IO搭配才完美。框架
從這個結果看,Sanic確實是很誘人的。固然,一個web網站不能是簡單的「Hello Word」,更多的是後臺邏輯處理、數據庫讀寫等。
Tornado是Python 2時代的明星,比起Django的笨重來它更輕巧,贏得了不少人的喜好,也包括本人。多年前,開始接觸Web開發就是從它開始的。到了Python 3 這個異步盛行的時代,Tornado 有些廉頗老矣。雖然它有異步支持,可是各類測試來看,都敵不事後起之秀的強勁。若是你如今想開始web開發,就不要用它了,去擁抱Sanic吧。
先看看這個對比結果驚訝一下下吧:
爲何秒殺全部框架,還包括Go語言的框架呢?其實,它底層都是C語言寫的,基本上就是用Python給C語言套了個盒子,高性能都來自C語言。管它怎麼實現的呢,用着爽就好了。但是,它仍是一個早期開發版本,做者本身也不推薦你們用,而且還推薦你們去用Sanic。
這個框架值得關注。
這又是一個使人驚訝的框架,用cython(C語言)實現了不少底層的東西,因此速度也是槓槓的。雖然處於早期開發階段,可是github上已經有四千多個星星了,使人不可小覷。
這一圈瞭解下來,Python的異步Web框架還處在一個羣雄逐鹿的戰國時代,尚未哪個特別出彩。這個時候選擇Sanic彷佛應該不錯。