为什么WSGI服务器在修改时需要重新加载Python文件,而PHP不需要


Why WSGI Server need reload Python file when modified but PHP not need?

我对这个问题很困惑。在Django开发时,如果我修改了py文件或静态文件,内置服务器将重新加载。但是在PHP应用程序开发中,如果我修改了文件,Apache服务器不需要重新加载,修改后的内容会显示在浏览器上。

为什么?

当CGI是运行动态web应用程序最常用的方式时,Django也曾做过同样的事情。它将为每个请求创建一个新的python进程,该进程将动态加载所有文件。但是,虽然PHP针对这种用例进行了优化,并且启动时间很快,但Python作为一种通用语言却没有这样做,并且存在一些相当严重的性能缺陷。WSGI(以及之前的FastCGI)通过在持久的后台进程中运行Python代码来解决这个性能问题。

因此,虽然WSGI提供了很多好处,但其中一个"缺点"是它只在进程(重新)启动时加载代码,因此您必须重新启动进程才能使任何更改生效。在开发中,这很容易通过使用自动加载器来解决,比如Django的manage.py runserver命令。

在生产环境中,有很多原因导致您希望延迟重新启动,直到环境准备好。例如,如果您引入代码更改,其中包括添加数据库字段的迁移,则在运行迁移之前,新版本的代码将无法运行。在这种情况下,在实际运行了所有必要的迁移之前,您不希望运行新代码。