天天看點

python 架構tornado_都2020年了,python的tornado架構還有用武之力麼?

從官網的更新和github上的維護來看,他自己是沒有放棄的,是以如果一定要說涼,應該是用的人太少了,被涼涼。

如果隻是做web開發,從開發友善程度以及生态(就算考慮性能),tornado也不是最好的技術選型,就像别人說的,他為什麼沒那麼受歡迎。

如果選擇tornado,可能有這麼幾個可能(以我為例):

1 我希望了解異步相關的用法和生态。

這點的話,還不是非他不可,python的異步web架構并不是沒有别的選型(比django和flask更小衆吧,而且官方維護相對而言較差,目前較少人用過生産環境,比如vibora,直接說準備重構,停了一年了)

2 我想了解一些過程(http協定和資料庫連接配接相關)

django我也會用(orm表設計那一套),但是我對他的感覺就是:他适合快速完成工作,而不是學習。大概是他封裝的太好了,是以很多東西我們并不知道是如何完成的,隻需要知道如何調用api就成了。這一點在tornado中就,做得少一點,很多東西我們需要自己去完成。是以如果趕工期的任務,我想tornado同樣不是最優的選擇。而且對于一個已經在學習原理這條路上走得比較前的人,他已經不需要這麼一個使用tornado的過程來學習了。是以django這類的,就很友善,生活工作兩不誤。

3 可能發生的tcp服務

tornado不僅僅是web伺服器,也可以用于開發tcp服務。這算是一個很難被另外兩個架構替代的。但是呢,如果題主限于web後端,那麼tcp服務程式的開發是很少的。是以選擇它更像是希望學習一個架構有更大的相容性(避免去學習多個架構)

除此之外,就我而言我找不到很明顯的,我選擇tornado的原因。

有幾點自己曾經關注但後面有點放棄的。

1 tornado的并發

他沒有線程切換的開銷,這是他異步協程的特點。但是他的qps什麼的并沒有表現得很離譜(純python實作的,可以了解),是以他适用的場景是異步任務,比如後端接口調用。但是如果是正常的web開發(curd這類),它的性能表現并沒有好到讓大家放棄django這類架構的便捷程度,同時,如果為了好的性能,很多都用go了(這不是架構本身差,而是語言速度本身慢,我相信用同樣的設計原理,用go語言實作tornado肯定也不會差)。

tornado适合保持連接配接類的tcp服務,比如一些推送。

2 pypy加速tornado

就我而言我很少用pypy加速。因為用python就是為了他的生态,而他的生态裡面,很大個限制就是cpython。用pypy的話,除非你能抽象分離,tornado部分做成類似于調用背景任務的中間層。但實際效果?我很懷疑

是以,你問他有用武之地麼,結論就是:

看你用在什麼方面,以什麼目的去用。