日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

两个Python web框架:Django Tornado比较

發布時間:2023/12/13 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个Python web框架:Django Tornado比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
就是說它作為 web 框架比 Django 簡單,又支援異步 IO,且更不需要前端的 webserver ?
我已經混亂了, Tornado是 Nginx、Django、Node.js 的結合體?又或是 Nginx * 20% + Django * 40% + Node.js * 40% ?


你需要搞清楚幾個概念:
1,web server是監聽端口,負責HTTP鏈接管理、數據收發、HTTP協議實現等底層上的處理。
2,Web框架定義的是單個HTTP請求處理的流程。
3,nginx是反向代理服務器,是一個特殊的web server應用,和web server并不是同級的概念。

Tornado既是web server又是web框架,這兩者并不矛盾。

舉例來說,你寫了一個tornado應用之后,直接把tornado端口跑在8000,這個時候,通過localhost:8000/foo就能訪問到你的網頁。這里分兩步,tornado完成了底部IO事件的監聽和數據接受等工作,這是tornado完成了其作為web server的使命。然后你通過按照tornado框架定義的流程,在對應的地方寫了個get函數,實現了這個頁面的具體內容,這是tornado作為web 框架體現了作用。

那么nginx有什么用?

他是個反向代理,反向代理顧名思義,其作用就是將接收到的HTTP請求按照一定的規則轉發給后端其他服務器處理。

比如在你的一臺機器上跑了三個tornado應用:foo1,foo2,foo3,端口分別為8000,8001,8003,你希望用戶可以直接通過80端口來訪問這些應用。這個時候你就可以用nginx來達到這個目的了。讓nginx跑在80端口,當他接收到請求時,如果是/foo1,就轉發給8000端口處理;如果是/foo2,就轉發給8001端口處理,foo3類似。


所以,tornado和nginx并沒有什么聯系。實際上,很多框架都實現了一些簡易web server,用于調試。tornado的web server是異步的,以可以處理大量的非活躍長連接著稱。所以其web server是他的一個特性feature,在介紹的時候就會提及自己是一個很酷的webserver了。

回到主題,題主你在你機器上裝裝nginx、用tornado寫個hello world就都清楚了。 ==============================================================================================

Django

?

Django 應該是最出名的py框架,Google App Engine甚至Erlang都有框架受它影響。

?

Django是走大而全的方向,它最出名的是其全自動化的管理后臺:只需要使用起ORM,做簡單的對象定義,它就能自動生成數據庫結構、以及全功能的管理后臺。

?

Django提供的方便,也意味著Django內置的ORM跟框架內的其他模塊耦合程度高。

?

應用程序必須使用Django內置的ORM,否則就不能享受到框架內提供的種種基于其ORM的便利;理論上可以切換掉其ORM模塊,但這就相當于要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。

?

Django的賣點是超高的開發效率,其性能擴展有限;采用Django的項目,在流量達到一定規模后,都需要對其進行重構,才能滿足性能的要求。

?

這方面的經驗可以參考:http://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus

?

Ruby的Rails也有類似的問題;以Twitter為例,推特到了今日的規模,不要說Rails,甚至是連Ruby都需要拋棄重來。

?

就我的感覺Django適用的是中小型的網站,或者是作為大型網站快速實現產品雛形的工具。

?

快速推出產品是王道:

?Believe it or not, the bigger problem isn't scaling, it's getting to the point where you have to scale. Without the first problem you won't have the second. - http://gettingreal.37signals.com/ch04_Scale_Later.php

?

===== Django 模板 =====

Django的模板系統設計十分有意思,也應該其框架內影響最大、爭議最大的部分。

?

Django模板的設計哲學是徹底的將代碼、樣式分離;asp.net提倡將代碼/模板分離,但技術上還是可以混合;而Django則是從根本上杜絕在模板中進行編碼、處理數據的可能。

?

比方說,asp.net模板中可以寫:

<%

?int i;

?for(i==0;i<10;i++){

?....

?}

%>

?

Django是徹底不支持嵌入類似上面的代碼,僅能使用其模板內置的函數;這實際上,是為其模板構造了一種“新語言”;由于此“新語言”十分簡單,所以也能夠將其模板移植到不同平臺。

?

大多數情況下,Django的模板功能是足夠的,但對于特殊(有時“特殊”也不是十分特殊)的情況,還是需要在模板中嵌入代碼,那么就需要根據其模板系統的規則做模板擴展。有時候,模板中直接寫一行代碼能夠解決的問題,用模板擴展實現后,會變成十幾行代碼。

?

是否容忍在模板中編程,正是Django模板爭議最大之處。

?

Tornado

?

Tornado( http://www.tornadoweb.org )是Facebook開源出來的框架,其哲學跟Django近乎兩個極端。

?

Tornado走的是少而精的方向,它也有提供模板功能;雖然不鼓勵,但作者是可以允許在模板進行少量編碼(直接嵌入單行py代碼)的。

?

如果跟asp.net相比,Tornado有點類似僅實現了AsyncHttpHandler;除此之外,全部需要自己去實現。

?

好吧,其實它有模板,有國際化支持,甚至還有內置的OAuth/OpenID模塊,方便做第三方登錄,它其實也直接實現了Http服務器。

?

但它沒有ORM(僅有一個mysql的超簡單封裝),甚至沒有Session支持,更不要說Django那樣自動化的后臺。

?

假設是一個大型網站,在高性能的要求下,框架的各個部分往往都需要定制,可以復用的模塊非常少;一個以Django開發的網站,各部分經過不斷的定制,Django框架剩下的,很有可能也就是tornado一開始所能提供的這部分。

?

殊途同歸。

?

===== HTTP服務器 =====

Tornado為了高效實現Comet/后端異步調用HTTP接口,是直接內嵌了HTTP服務器。

?

前端無需加apache / lighttpd / nginx等也可以供瀏覽器訪問;但它并沒有完整實現HTTP 1.1的協議,所以官方文檔是推薦用戶在生產環境下在前端使用nginx,后端反向代理到多個Tornado實例。

?

Tornado本身是單線程的異步網絡程序,它默認啟動時,會根據CPU數量運行多個實例;充分利用CPU多核的優勢。

?

===== 單線程異步 =====

網站基本都會有數據庫操作,而Tornado是單線程的,這意味著如果數據庫查詢返回過慢,整個服務器響應會被堵塞。

?

數據庫查詢,實質上也是遠程的網絡調用;理想情況下,是將這些操作也封裝成為異步的;但Tornado對此并**沒有**提供任何支持。

?

這是Tornado的**設計**,而不是缺陷。

?

一個系統,要滿足高流量;是必須解決數據庫查詢速度問題的!

?

數據庫若存在查詢性能問題,整個系統無論如何優化,數據庫都會是瓶頸,拖慢整個系統!

?

異步并**不能**從本質上提到系統的性能;它僅僅是避免多余的網絡響應等待,以及切換線程的CPU耗費。

?

如果數據庫查詢響應太慢,需要解決的是數據庫的性能問題;而不是調用數據庫的前端Web應用。

?

對于實時返回的數據查詢,理想情況下需要確保所有數據都在內存中,數據庫硬盤IO應該為0;這樣的查詢才能足夠快;而如果數據庫查詢足夠快,那么前端web應用也就無將數據查詢封裝為異步的必要。

?

就算是使用協程,異步程序對于同步程序始終還是會提高復雜性;需要衡量的是處理這些額外復雜性是否值得。

?

如果后端有查詢實在是太慢,無法繞過,Tornaod的建議是將這些查詢在后端封裝獨立封裝成為HTTP接口,然后使用Tornado內置的異步HTTP客戶端進行調用。

轉載于:https://www.cnblogs.com/duanxz/p/5428525.html

總結

以上是生活随笔為你收集整理的两个Python web框架:Django Tornado比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。