python web开发初探

来源:互联网 发布:听音记谱软件 编辑:程序博客网 时间:2024/05/17 04:33
  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/151468、http://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类来创建实例。

原创粉丝点击