mod_wsgi守护进程模式、WSGIApplicationGroup与Python解释器分离
我在使用Apache服务器,设置了两个虚拟主机,每个主机上都运行着一个Django网站,使用的是mod_wsgi的守护进程模式,配置大致是这样的:
<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解释器,还是每个进程都有一个独立的解释器。(顺便提一下,我知道这个空的解释器名称''是因为把%{GLOBAL}
传给了WSGIApplicationGroup
。)
我尝试检查一下sys.path
的条目是否在后续的进程中累积,但并没有,这可能表明每个守护进程都有一个独立的Python解释器……不过我对这些事情不是很了解,所以我在这里询问。
1 个回答
7
这个'pid'值是不一样的,因为它们在不同的进程里。