我有一个Apache服务器,其中包含2个虚拟主机,每个虚拟主机都使用mod_wsgi守护进程模式附加了一个Django站点,如下所示:
<VirtualHost 123.123.123.123:80>
WSGIDaemonProcess a.com user=x group=x processes=5 threads=1
WSGIProcessGroup a.com
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>
<VirtualHost 123.123.123.123:80>
WSGIDaemonProcess b.com user=x group=x processes=5 threads=1
WSGIProcessGroup b.com
WSGIApplicationGroup %{GLOBAL}
</VirtualHost>
我使用
WSGIApplicationGroup %{GLOBAL}
,因为有Xapian已知的问题。
现在,如果我了解背后发生的事情,mod_wsgi会为我的每个站点启动5个守护进程。我可以在Apache日志中看到这一点:
[info] mod_wsgi (pid=8106): Attach interpreter ''.
[info] mod_wsgi (pid=8106): Adding '.../lib/python2.5/site-packages' to path.
[info] mod_wsgi (pid=8106): Enable monitor thread in process 'a.com'.
[info] mod_wsgi (pid=8106): Enable deadlock thread in process 'a.com'.
[info] mod_wsgi (pid=8107): Attach interpreter ''.
[info] mod_wsgi (pid=8107): Adding '.../lib/python2.5/site-packages' to path.
[info] mod_wsgi (pid=8107): Enable monitor thread in process 'a.com'.
[info] mod_wsgi (pid=8107): Enable deadlock thread in process 'a.com'.
...
我不明白的是,如果这些“Attach interpreter''”行表示所有这些进程共享同一个Python解释器,还是每个进程都有一个解释器。 (顺便说一句,我意识到空的解释器名称''是通过向WSGIApplicationGroup传递% {GLOBAL}引起的。)
我尝试检查是否可能在后续进程中累积了sys.path条目,但它们没有 - 这可能表明每个5个守护进程都有单独的Python解释器...但我不太理解所有这些东西,所以我在这里问。