python web開發初探

  1. python web服務器環境的搭建

    選擇什麼樣的環境是面臨的第一個問題。由於初涉python web開發,花費了許多時間查相關資料,幸好以前有些java方面的經驗,否則對習慣了集成開發環境的人來說是相當痛苦的。

    根據我初步的瞭解來看,服務器環境大概有3個部分:web前端代理及wsgi服務器+web應用框架+數據庫服務器。較爲常用的是:nginx & uwsgi + flask / web.py + mysql或者 nginx + tornado + mysql。 實際上tornado自己就能運行起來,不過nginx可以同時部署多個應用,並統一做反向代理以及負載均衡。

    由於工作的原因,不得不選擇在windows上做技術學習,所以暫時選擇nginx + tornado。如果是在產品部署階段,這樣做其實是會讓tornado的併發性能大打折扣。因此,我會在熟悉一段時間後採用VMware虛擬機安裝CentOS5.8來部署,到最後直接部署到linux機上。

    關於在window上使用tornado會帶來那些影響,可以參考:http://my.oschina.net/quanpower/blog/151468http://my.oschina.net/quanpower/blog/151471,言之就是unix機上的epoll機制沒有得到支持。

    uWSGI採用自己的UWSGI協議,佔用內存少、可以負載均衡、速度快。但是UWSGI目前要在Windows下部署,需要到Cygwin下編譯,也是因爲windows下不支持epoll機制。

    關於性能的對比可以參考:http://1.guotie.sinaapp.com/?p=168

  1. Tornado的特性 

     tornado是一個極輕量級、高可伸縮性和非阻塞IO的Web服務器軟件。其中最重要的就是非阻塞。

     由於tornado 對 WSGI 只提供了有限的支持,即使如此,因爲 WSGI 並不支持非阻塞式的請求,所以如果你使用 WSGI 代替 Tornado 自己的 HTTP 服務的話,那麼你將無法使用 Tornado 的異步非阻塞式的請求處理方式。 比如@tornado.web.asynchronous、httpclient 模塊、auth 模塊, 這些將都無法使用。

     因爲 FriendFeed 以及其他 Tornado 的主要用戶在使用時都是基於 nginx或者 Apache 代理之後的。所以現在 Tornado 的 HTTP 服務部分並不完整,它無法處理多行的 header 信息,同時對於一 些非標準的輸入也無能爲力。所以,要謹慎的使用tornado.wsgi.WSGIApplication類,一般還是使用tornado.web.Application類來創建實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章