2009-09-25 73 views
0

可以通过请求重新加载Django应用程序吗?Django在每次请求时自动重新开发?

这对开发非常有用。 Ruby on Rails 就是这样。

  1. 的runserver重新加载,但它重新加载慢,而且有时还是一个 必须停止和重新启动它的一些变化显示出来。 (在管理员的示范性变化。)
  2. 的mod_wsgi可以在Linux上通过触摸* .wsgi文件自动重。 在Windows上,必须使用观察者/重新加载器脚本,并且 的速度很慢。
  3. 我没有尝试mod_python或fastcgi,他们可以这样做吗?

此原因背后的原因是当更改脚本时,想要 更改立即显示。

回答

2

当然这将是缓慢的重新加载,它必须再次不加载所有的应用程序代码只是一个文件。 Django不是PHP,所以不要指望它的工作原理是一样的。

如果你真的想给Django的每个请求重新加载不管,然后使用CGI和CGI/WSGI桥。尽管CGI本身增加了额外的开销,但它仍然会很慢。

使用代码监视器,其使用UNIX时,或者,如果使用的是Windows,是最好的折衷进行守护模式下工作的阿帕奇/ mod_wsgi的方法。也就是说,它每秒检查一次代码文件,它是被更改的应用程序的一部分,然后才重新启动该进程。运行服务器本身也使用内存中的这种第二轮询方法。

使用这种投票方式也引入一个第二个窗口已检测代码重载的要求之前,你可以提出请求。大多数人并不那么快从保存文件到在浏览器中重新加载,因此不会注意到。

在Apache/mod_wsgi 3.0中,有一些机制可以允许人们实现替代代码重新载入器,通过在请求开始时安排对已修改代码的检查来消除该窗口,但这会影响每个请求的表现。对于轮询方法,它在后台运行,因此通常不会对请求造成任何性能影响。

即使在使用最新版本的Apache/mod_wsgi中,也可以通过使用嵌入模式并将Apache MaxRequestsPerChild设置为1来做同样的事情,但这也会影响服务静态文件的性能。

总之,试图迫使每个请求重新加载是不要去关于它的最佳途径,当然不会排除使用脂肪Python的Web应用程序,如Django的产生的负载延迟。

+1

'./manage.py runfcgi'也支持maxrequests参数,它可以设置为1以强制重新加载。 http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/ – 2009-09-26 04:06:41

相关问题