成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分享兩個Python web框架:Django&Tornado

開發 后端 前端
在各種語言平臺中,python涌現的web框架恐怕是最多的;猜想原因應該是在py中構造框架十分簡單,使得輪子不斷被發明。這里記述一下我了解過的兩個py web框架,供大家參考,希望能起他山之石的作用。

Django

Django 應該是最出名的Python框架,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模板中可以寫:

  1. <%  
  2.   int i;  
  3.   for(i==0;i<10;i++){  
  4.   ....  
  5.   }  
  6. %> 

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客戶端進行調用。

原文鏈接:http://www.cnblogs.com/wuvist/archive/2011/06/28/django-And-tornado.html

【編輯推薦】

  1. Python高手是如何練成的
  2. Python入門之你必須了解的實用技巧
  3. 如何在NetBeans 7.0安裝Python插件
  4. 使用NetBeans IDE開發Python應用程序詳解
  5. Python入門之你必須了解的基礎知識
責任編輯:陳貽新 來源: 問天的博客
相關推薦

2023-04-28 08:28:14

FlaskDjangoPython

2019-02-11 09:35:04

Python應用程序Tornado

2017-09-11 10:55:22

PythonWeb框架

2018-12-03 08:25:24

2023-10-09 18:17:52

Python語言Web

2021-03-18 08:59:14

框架pytorchtensorflow

2020-02-21 08:45:45

PythonWeb開發框架

2019-10-31 08:22:39

shell腳本Linux

2025-03-10 08:00:00

AI數字化轉型CIO

2019-03-29 15:34:39

Go框架Web

2022-04-07 15:41:36

PythonWeb 開發框

2021-10-27 11:29:32

框架Web開發

2020-08-31 11:40:54

VimLinux字符

2021-08-26 08:00:00

Django開發框架

2020-12-08 22:07:08

PythonWebDjango

2022-06-17 09:46:51

Chrome 102Chrome瀏覽器

2021-12-06 09:00:00

開發WebDjango

2019-05-31 08:50:13

蘋果數據開發者

2023-11-23 08:30:16

2020-01-11 17:00:07

DjangoPythonWeb API
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久网站 | 日本一区二区三区免费观看 | 国产精品视频久久 | 青青青伊人 | 日本精品免费在线观看 | 国产精品18hdxxxⅹ在线 | 亚洲精品二区 | 国产综合久久 | 蜜桃免费av | 久久精品国产久精国产 | 一区二区三区国产 | 国产ts一区 | 国产精品久久久久久一区二区三区 | 紧缚调教一区二区三区视频 | 国产成人a亚洲精品 | 日韩欧美国产综合 | 天天拍夜夜爽 | 中文字幕一区在线 | 一级特黄视频 | av在线播放免费 | 九九免费 | 久久99久久99精品免视看婷婷 | av日日操 | 国产9999精品 | 欧美一级二级视频 | 久久久精品国产 | 四虎国产 | 中国三级黄色录像 | 91久久精品 | 精品在线免费观看视频 | 欧美一区二区三区视频在线播放 | 久久机热 | 夜夜草 | av在线一区二区三区 | 日韩av成人| 日韩在线中文 | 午夜视频在线观看网站 | 国产在线中文字幕 | 久久看看 | 久在线观看 | 欧美在线资源 |