FastCGI、CherryPy 和 Python

5
所以我正在尝试在Python中进行更多的Web开发,并选择了CherryPy,由Lighttpd w/ FastCGI托管。但我的问题非常基础:为什么我每次更改应用程序代码或底层库的代码时都需要重新启动Lighttpd(或Apache)?
我意识到这个问题源于对FastCGI模型的基本误解,因此我愿意接受任何教学,但我习惯于只更改PHP文件并显示出来,而不是必须弹起Web服务器。
欢迎任何阐明/有用的嘲笑。

1
“弹回”?这是指“重新启动”还是其他什么?通常在计算机中,“弹回”指的是尝试检索被拒绝的错误信息或类似概念的行为。 - Peter Hansen
是的,"bounce" 的意思是重新启动进程。在我的经验中,人们通常会谈论重新启动 Apache、Tomcat 等等。 - Wells
相关:https://dev59.com/oErSa4cB1Zd3GeqPUj70 - miku
2
好的,明白了,"bounce"是指在http://www.jargon.net/jargonfile/b/bounce.html中定义4中的含义。 - Peter Hansen
2个回答

8
这是因为性能问题。对于开发来说,自动重新加载很有帮助。但是对于生产环境,你不想自动重新加载。在PHP中,这实际上是一个相当大的瓶颈。每次访问PHP网页时,服务器都必须从头开始解析和加载每个页面。而Python脚本在第一次访问后就已经加载并运行了。
正如已经指出的,CherryPy有一个自动重新加载设置。我建议在开发中使用CherryPy内置服务器,并在生产中使用lighttpd。这可能会节省您一些时间。教程展示了如何做到这一点:tutorial

谢谢-我注意到在搜索时有很多评论说当cherrypy的自动重新加载开启时,flup似乎无法工作-有什么想法吗?我猜我可以使用一个非flup的WSGI模块。 - Wells
2
请注意,CherryPy实际上由两个组件组成:框架和服务器。如果您正在使用lighttpd,则只使用框架。如果您在开发中使用服务器,则无需担心,因为它将自动重新加载。一旦您转移到生产环境,那么我会建议您切换到lighttpd。 - Jason Baker

0

从系统软件编写者的角度来看:这完全取决于守护进程(lighttpd或fcgi)中关于服务器进程的元数据如何组织。有些程序仅设计为一次性初始化,大多数情况下,这可以实现更简单、更高效的内部编程模型。

通常很难以一种简单的方式编写服务器进程重新加载配置数据。您可能需要引入锁和外部事件对象(UNIX中的信号)。当您可以通过设计同步数据结构——即只初始化一次……为什么要通过使数据模型可修改多次而使事情变得复杂呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接