在运行多个Django虚拟主机时,WSGIApplicationGroup选择哪个值?

2024-10-06 14:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在mod wsgi下在同一个Apache实例上运行多个Django站点。目前我的阿帕奇.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

每当我需要重新加载站点时,我touch /srv/www/mysite/wsgi.py,这会导致所有客户端出现明显的冻结。在

在阅读https://groups.google.com/forum/#!topic/modwsgi/QJkt5UWYpss之后,我似乎可以通过在WSGIScriptAlias指令中指定进程/应用程序组来消除“重新加载暂停”:

^{pr2}$

IIUC,我需要同时提供process-group=和{},以便进行预加载。在

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

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

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


Tags: 文件pyhttpsmod应用程序wsgi站点www
1条回答
网友
1楼 · 发布于 2024-10-06 14:29:39

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

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

线程数=50看起来太过分了。在整个过程中你得到了什么,你的平均反应时间是多少。每个进程使用3-5个线程并使用多个进程可获得最佳性能。使用多个进程显然意味着使用更多内存,因为应用程序会有多个副本。在

最后,是的,除非您有充分的理由,否则建议将站点的HTTP和HTTPS版本都委派给同一个守护进程组。在第一个VirtualHost中指定WSGIDaemonProcess,就像Apache看到的服务器名一样。在80/443对中的第二个实例中,不要使用WSGIDaemonProcess,而是在另一个VirtualHost上下文中引用命名的进程组。在ServerName相同的情况下,允许这样做。在

相关问题 更多 >