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

9

我有一个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解释器...但我不太理解所有这些东西,所以我在这里问。
1个回答

7

'pid'的值不同。它们在不同的进程中。


在守护进程模式下,WSGIApplicationGroup会影响任何内容吗? - Tomasz Zieliński
2
会有两个,因为主要的解释器即全局解释器(%{GLOBAL})是在该进程中初始化Python本身的副作用。也就是说,它总是存在的。因此,如果使用守护程序模式并且只有一个应用程序,则强制使用主解释器实际上还可以节省一点内存,因为您不必为进程中创建额外的子解释器而产生开销。 - Graham Dumpleton
是的,你现在完全理解了。 - Graham Dumpleton
如果日志中有 ' ',我怎么知道它是否正在使用我的虚拟环境解释器? - johnny
取决于您使用的机制来告知mod_wsgi虚拟环境的方式。请恰当地提出一个新问题,而不是试图依附于现有问题。 - Graham Dumpleton
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接