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

Tom*_*ski 8 python apache mod-wsgi

我有2个虚拟主机的Apache,每个主机都有一个使用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>
Run Code Online (Sandbox Code Playgroud)

我使用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'.

...
Run Code Online (Sandbox Code Playgroud)

我不明白的是,这些"Attach interpreter ''"行是否表明所有这些进程共享相同的Python解释器,或者每个进程是否有一个解释器.(顺便说一句我意识到空解释名称""是通过传递引起%{GLOBAL}WSGIApplicationGroup).

我尝试检查sys.path后续进程中是否累积了条目,但它们没有 - 这可能表明5个守护进程中每个进程都有一个单独的Python解释器......但是我不太了解所有这些东西所以我是问这里

Gra*_*ton 6

'pid'值不同.它们处于不同的过程中.

  • 将有两个,因为主要解释器,即%{GLOBAL},被创建为在该过程中初始化Python本身的副作用.也就是说,它始终存在.因此,如果使用守护进程模式并且只有一个应用程序,强制使用主解释器实际上也节省了一点内存,因为您没有在进程中创建额外的子解释器的开销. (2认同)