我有许多 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 Off
Listen 12021
MaxSpareThreads 1
MinSpareThreads 1
MaxRequestsPerChild 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 1
WSGIDaemonProcess django processes=5 线程=1
但是我的进程并没有在每次请求时重新启动。一旦进程启动,它就会继续处理请求。我错过了什么吗?