Django在每次请求时自动加载进行开发?

时间:2009-09-25 15:38:48

标签: python django

可以在每个请求上重新加载Django应用吗?

这对开发非常有用。 Ruby on Rails 做到这一点。

  1. runserver重新加载,但它重新加载缓慢,有时仍然 一个人必须停下来再次启动它以显示一些变化。 (例如admin中的更改。)
  2. mod_wsgi可以通过触摸* .wsgi文件在Linux上自动加载。 在Windows上,必须再次使用观察者/重新加载器脚本 很慢。
  3. 我没有尝试过mod_python或fastcgi,他们可以这样做吗?
  4. 这背后的原因是在改变脚本时会想要 更改立即显示。

1 个答案:

答案 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)而导致的加载延迟。