mod_wsgi守护进程模式、WSGIApplicationGroup与Python解释器分离

9 投票
1 回答
10078 浏览
提问于 2025-04-16 11:57

我在使用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'值是不一样的,因为它们在不同的进程里。

撰写回答