运行多个Django虚拟主机时WSGIApplicationGroup的值是多少?

时间:2015-04-26 18:05:33

标签: python django apache mod-wsgi

我在mod_wsgi下的同一个Apache实例上运行多个Django站点。目前我的apache.conf文件包含以下指令(未指定WSGIApplicationGroup):

WSGIDaemonProcess mysite   \
    display-name=mysite    \
    threads=50             \
    maximum-requests=10000 \
    umask=0002             \
    home=/srv/www/mysite   \
    python-path=/srv/www:/srv/src:/srv/venv/prod/lib/python2.7/site-packages \
    python-eggs=/srv/.python-eggs

WSGIProcessGroup mysite
WSGIScriptAlias / /srv/www/mysite/wsgi.py

I touch /srv/www/mysite/wsgi.py每当我需要重新加载网站时,它会导致所有客户端明显冻结。

在阅读https://groups.google.com/forum/#!topic/modwsgi/QJkt5UWYpss之后,通过在WSGIScriptAlias指令中指定流程/应用程序组,我觉得可以摆脱“重新加载暂停”:

WSGIDaemonProcess mysite   \
    display-name=mysite    \
    threads=50             \
    maximum-requests=10000 \
    umask=0002             \
    home=/srv/www/mysite   \
    python-path=/srv/www:/srv/src:/srv/venv/prod/lib/python2.7/site-packages \
    python-eggs=/srv/.python-eggs

WSGIScriptAlias / /srv/www/mysite/wsgi.py    \
    process-group=mysite                     \
    application-group=mysite

IIUC,我需要同时提供process-group=application-group=来进行预加载。

到目前为止,我发现的所有文档都使用application-group=%{GLOBAL},但这对我的用例来说似乎不对,每个虚拟主机都应根据各个站点的settings.py文件运行代码(正确吗?)

我应该使用预定义的%{RESOURCE}变量而不是mysite

我可以在同一网站的http和https版本之间共享相同的应用程序组吗? (我知道我不能对进程组这样做。)

1 个答案:

答案 0 :(得分:1)

每个虚拟主机Django站点应该使用一个单独的守护进程组,因此%{GLOBAL}的应用程序组很好,因为它强制在相应的进程组中使用主解释器上下文。它不在进程组之间共享。

请注意,如果您在网站负载较重时进行重新启动,预加载不一定会有太大帮助,因为仍然需要等待进程启动并加载应用程序。

线程= 50看起来相当过分。你得到的是什么以及你的平均响应时间是多少。通过每个进程使用3-5个线程并使用多个进程来实现最佳性能。使用多个进程显然意味着使用更多内存,因为应用程序将有多个副本。

最后,是的,除非你有充分的理由,否则建议将HTTP和HTTPS版本的站点委托给同一个守护程序进程组。在Apache中为该ServerName看到的第一个VirtualHost中指定WSGIDaemonProcess。在80/443对中的第二个中,没有WSGIDaemonProcess并且在另一个VirtualHost上下文中引用指定的进程组。如果ServerName相同,则允许达到此目的。