可以在每个请求上重新加载Django应用吗?
这对开发非常有用。 Ruby on Rails 做到这一点。
这背后的原因是在改变脚本时会想要 更改立即显示。
答案 0 :(得分:2)
当然重新加载会很慢,它必须再次加载所有应用程序代码,而不仅仅是一个文件。 Django不是PHP,所以不要指望它的工作原理是一样的。
如果您真的希望Django在每个请求上重新加载,那么使用CGI和CGI / WSGI桥。尽管CGI本身增加了额外的开销,但它仍然会很慢。
使用代码监视器的Apache / mod_wsgi方法,在使用UNIX时使用守护进程模式,或者使用Windows,是最好的折衷方案。也就是说,它每秒检查一次代码文件,该代码文件是正在更改的应用程序的一部分,然后才重新启动该进程。运行服务器本身也使用内存中的这一秒轮询方法。
使用此轮询方法会引入一秒窗口,您可以在检测到代码重新加载要求之前发出请求。虽然从保存文件到在浏览器中重新加载,大多数人都没那么快,所以不会注意到。
在Apache / mod_wsgi 3.0中,有一些机制允许用户实现替代代码重新加载器,通过在请求开始时安排检查修改后的代码来消除该窗口,但这会影响到每个请求的性能。对于轮询方法,它在后台运行,因此通常不会对请求产生任何性能影响。
即使在具有当前版本的Apache / mod_wsgi中,您也可以通过使用嵌入模式并将Apache MaxRequestsPerChild设置为1来执行相同的操作,但这也会影响提供静态文件的性能。
简而言之,尝试强制重新加载每个请求并不是解决问题的最佳方式,当然也不会消除因使用胖胖的Python Web应用程序(如Django)而导致的加载延迟。