我有很多django安装,只能在一个URL下运行。所以我有一个像
这样的结构Django安装2
Django Installation N
在我的根目录下。
现在从URL“www.mysite.com/installation1”我拿起子部分“installation1”并将os.environ ['DJANGO_SETTINGS_MODULE']设置为“installation.settings”并让处理请求。现在请求“www.mysite.com/installation2”我必须这样做。但是由于django在内部缓存了站点对象,AppCache等,我必须在每次请求之前重启wsgi进程,以便清除django的内部缓存。 (我知道表现不会好,但我并不担心)。为了实现上述场景我已经实现了以下解决方案:
在django.core.handlers.wsgi中,我在def“调用”中进行了以下更改
if environ['mod_wsgi.process_group'] != '':
import signal, os
print 'Sending the signal to kill the wsgi process'
os.kill(os.getpid(), signal.SIGINT)
return response
我的假设是,在发送响应后,每个请求都会杀死deamon进程。我想证实这一假设,即我的过程只会被杀死,并且只有在我的回复被发送后才会被杀死。
还有另一种方法可以解决这个问题
由于
编辑:在建议将MaxRequestsPerChild设置为1后,我对httpd.conf进行了以下更改
KeepAlive Off
听12021
MaxSpareThreads 1
MinSpareThreads 1
MaxRequestsPerChild 1
ServerLimit 1
HTTPS上的SetEnvIf X-Forwarded-SSL = 1
ThreadsPerChild 1
WSGIDaemonProcess django processes = 5 threads = 1
但我的流程并未在每次请求时重新启动。一旦进程启动,它就会继续处理请求。我错过了什么吗?
答案 0 :(得分:0)
这应该可以使用apache指令MaxRequestsForChild
到 1 ,如http://httpd.apache.org/docs/2.2/mod/mpm_common.html#maxrequestsperchild中所述
然而,每个进程守护进程都是全局的。
<强>更新强>
或者你可以在http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines
中检查maximum-requests
选项进入WSGIDaemonProcess
答案 1 :(得分:0)
不要这样做。 WSGI流程的持续时间长于单个请求的原因 - 您说您并不担心性能,但仍然没有理由这样做。我不知道为什么你认为你需要 - 很多人在一台服务器上运行多个Django站点,并且在每次请求之后都没有人觉得需要杀死进程。
相反,您需要确保每个站点都在自己的WSGI进程中运行。请参阅mod_wsgi文档以了解如何执行此操作:Application Groups似乎是一个很好的起点。