【发布时间】:2012-09-19 08:31:20
【问题描述】:
我有许多 django 安装,它们只能在一个 URL 下运行。所以我有一个像
这样的结构- Django 安装 1
Django 安装 2
Django 安装 N
在我的根目录下。
现在,我从 URL “www.mysite.com/installation1”获取子部分“installation1”并将 os.environ['DJANGO_SETTINGS_MODULE'] 设置为“installation.settings”,然后处理请求。现在对于请求“www.mysite.com/installation2”,我必须这样做。但是,由于 django 在内部缓存站点对象、AppCache 等,我必须在每次请求之前重新启动 wsgi 进程,以便清除 django 的内部缓存。 (我知道性能不会很好,但我并不担心)。为了实现上述场景,我实现了以下解决方案:
- 在 httpd.conf 中作为 WSGIDaemonProcess django processes=5 threads=1
-
在 django.core.handlers.wsgi 中,我在 def "call"
中做了以下更改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
我的假设是,在发送响应后,每个请求都会杀死守护进程。我想确认这个假设,即我的进程只会在我的响应发送后才会被杀死。
还有其他方法可以解决这个问题
谢谢
编辑:在建议将 MaxRequestsPerChild 设置为 1 之后,我对 httpd.conf 进行了以下更改
KeepAlive 关闭
听12021
MaxSpareThreads 1
MinSpareThreads 1
MaxRequestsPerChild 1
服务器限制 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 1
WSGIDaemonProcess django 进程=5 线程=1
但是我的进程没有在每次请求时重新启动。一旦进程启动,它就会继续处理请求。我错过了什么吗?
【问题讨论】: