FastCGI、CherryPy和Python
我最近在学习用Python做网页开发,选择了cherrypy,并且用lighttpd配合fastcgi来托管。但是我有个很基础的问题:为什么每次我修改应用代码或者底层库的代码时,都需要重启lighttpd(或者apache)呢?
我意识到这个问题是因为我对fastcgi模型的理解不够,所以我很乐意接受任何指导。不过我习惯了只需修改一个PHP文件,修改就能立刻生效,而不是还要重启网页服务器。
任何解释或者有用的调侃都很欢迎。
2 个回答
0
从一个系统软件开发者的角度来看: 这一切都取决于你的守护进程(比如lighttpd或fcgi)是如何组织服务器进程的元数据的。有些程序是为了只初始化一次而设计的——大多数情况下,这样可以让内部编程模型更简单,性能也更好。
通常,编写一个服务器进程以便轻松重新加载配置数据是非常困难的。你可能需要引入锁和外部事件对象(在UNIX中称为信号)。如果你可以通过设计来同步数据结构——也就是说,只初始化一次……那为什么要通过让数据模型可以多次修改来让事情变得复杂呢?
8
这是因为性能问题。在开发阶段,自动重载功能很有帮助。但在生产环境中,你不希望使用自动重载。其实,这在PHP中是一个相当大的瓶颈。每次访问一个PHP网页时,服务器都需要从头解析和加载每个页面。而在Python中,第一次访问后,脚本已经被加载并在运行了。
正如之前提到的,CherryPy有一个自动重载的设置。我建议在开发时使用CherryPy自带的服务器,而在生产环境中使用lighttpd。这样可能会节省你一些时间。这个教程会告诉你怎么做。