-
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/151468、http://my.oschina.net/quanpower/blog/151471,言之就是unix機上的epoll機制沒有得到支持。
uWSGI採用自己的UWSGI協議,佔用內存少、可以負載均衡、速度快。但是UWSGI目前要在Windows下部署,需要到Cygwin下編譯,也是因爲windows下不支持epoll機制。
關於性能的對比可以參考:http://1.guotie.sinaapp.com/?p=168
-
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類來創建實例。