“One does not live by bread alone,but by every word that comes from the mouth of God”
—(MATTHEW4:4)
python开发框架
不管是python,还是php,亦或别的做web项目的语言,乃至于做其它非web项目的开发,一般都要用到一个称之为什么什么框架的东西。
框架的基本概念
开发这对框架的认识,由于工作习惯和工作内容的不同,有很大差异,这里姑且截取维基百科中的一种定义,之所以要给出一个定义,无非是让看官有所了解,但是是否知道这个定义,丝毫不影响后面的工作。
软件框架(Software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。
简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作。或者说就是使用别人搭好的舞台,你来做表演。
我比较喜欢最后一句的解释,别人搭好舞台,我来表演。这也就是说,如果我在做web项目的时候,能够省却很多开发工作。的确是。所有,做web开发,要用一个框架。
有高手工程师鄙视框架,认为自己编写的才是王道。这方面不争论,框架是开发中很流行的东西,我还是固执地认为用框架来开发,更划算。
python框架
有人说php(什么是php,严肃的说法,这是另外一种语言,更高雅的说法,是某个活动的汉语拼音简称)框架多,我不否认,php的开发框架的确很多很多。不过,python的web开发框架,也足够使用了,列举几种常见的web框架:
- Django:这是一个被广泛应用的框架,如果看官在网上搜索,会发现很多公司在招聘的时候就说要会这个,其实这种招聘就暴露了该公司的开发水平要求不高。框架只是辅助,真正的程序员,用什么框架,都应该是根据需要而来。当然不同框架有不同的特点,需要学习一段时间。
- Flask:一个用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。
- Web2py:是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine(这是google的元计算引擎,后面我会单独介绍)。
- Bottle: 微型Python Web框架,遵循WSGI,说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。
- Tornado:全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。
- webpy: 轻量级的Python Web框架。webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。
说明:以上信息选自:http://blog.jobbole.com/72306/ ,这篇文章中还有别的框架,由于不是web框架,我没有选摘,有兴趣的去阅读。
Tornado
一看到这个标题就知道,本教程中将选择使用这个框架。此前有朋友建议我用Django,首先它是一个好东西。但是,我更愿意用Tornado,为什么呢?因为……,看下边或许是理由,也或许不是。
Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使用,被Facebook收购以后框架以开源软件形式开放给大众。看来Tornado的出身高贵呀,对了,如果是在天朝的看官,可能对Facebook有风闻,但是要一睹其芳容,还要努力。或者有人是不是怀疑这个地球上就没有这个网站呢?哈哈。按照某个地方的网络,它是存在的。废话不说,还是看Tornado的性能,因为选框架,一定要选好性能的,没准儿什么时候你也开发高大上的东西了。
Tornado的性能是相当优异的,因为它试图解决一个被称之为“C10k”问题,就是处理大于或等于一万的并发。一万呀,这可是不小的量。(关于C10K问题,看官可以浏览:C10k problem)
下表是和一些其他Web框架与服务器的对比,供看官参考(数据来源: https://developers.facebook.com/blog/post/301 )
条件:处理器为 AMD Opteron, 主频2.4GHz, 4核
服务 | 部署 | 请求/每秒 |
---|---|---|
Tornado | nginx, 4进程 | 8213 |
Tornado | 1个单线程进程 | 3353 |
Django | Apache/mod_wsgi | 2223 |
web.py | Apache/mod_wsgi | 2066 |
CherryPy | 独立 | 785 |
看了这个对比表格,还有什么理由不选择Tornado呢?
就是它了——Tornado
安装Tornado
Tornado的官方网站:http://www.tornadoweb.org
在官网上,有安装方法,其实,看官也可以直接在官方上学习。另外,有一个中文镜像网站,看官也可以访问:http://www.tornadoweb.cn/
我在自己电脑中(ubuntu12.04),用下面方法安装,只需要一句话即可:
pip install tornado
这是因为Tornado已经列入PyPI,因此可以通过 pip 或者 easy_install 来安装。
如果你没有安装 libcurl 的话,你需要将其单独安装到系统中。请参见下面的安装依赖一节。
如果不用这种方式安装,下面的页面中有可以供看官下载的最新源码版本和安装方式:
https://pypi.python.org/pypi/tornado/
此外,在github上也有托管,看官可以通过上述页面进入到github看源码。
最后要补充一个要点,就是上述下载的Tornado无法直接安装在windows上,如果要在windows上安装,建议使用pypm(这是一个什么东西,关于这个东西,可以访问官方文档:http://docs.activestate.com/activepython/2.6/pypm.html ,说实话,我也没有用过它,只是看了看文档罢了。看官如果有使用的,可以写一个教程共享之。),如下安装:
C:\> pypm install tornado