安装scipy后无响应的Apache + mod_wsgi


10

我目前正在使用Apache 2.2.15和mod_wsgi 3.2运行Centos 6.4服务器。该服务器托管了一个基于django的站点(django 1.5.1,python 2.6.6)。一切运行良好,直到我通过pip安装了scipy 0.12.0。现在,当我尝试加载django应用程序时,服务器没有响应,并且看来子httpd进程已生成挂起。浏览我的日志(/ var / logs / httpd / error_log,vhost error.log和系统日志)不会产生任何错误。

如果我通过django manage.py shell加载模型等,一切正常,这使我相信这是一个mod_wsgi问题。

关于如何开始对此进行故障排除的任何想法?

Answers:


22

一些使用C扩展模块的Python第三方软件包,其中包括scipy和numpy,将仅在Python主解释器中工作,并且在默认情况下不能作为mod_wsgi在子解释器中使用。结果可能是线程死锁,错误的行为或进程崩溃。这些详细信息:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

解决方法是使用以下命令强制WSGI应用程序在流程的主要解释器中运行:

WSGIApplicationGroup %{GLOBAL}

如果在同一服务器上运行多个WSGI应用程序,您将要开始使用守护程序模式进行调查,因为某些框架不允许多个实例在同一解释器中运行。Django就是这种情况。因此,请使用守护程序模式,以便每个进程都在其自己的进程中,并强制每个进程在其各自的守护程序模式进程组的主解释器中运行。


嗨,格雷厄姆,您能否在mod-wsgi的最新版本的上下文中更新此答案?具体来说,如果我使用mod_wsgi-express配置了apache,默认情况下这应该是一个问题吗?在生成的httpd.conf文件中,WSGIApplicationGroup不使用。然而,application-group=${GLOBAL}<IfDefine ONE_PROCESS><IfDefine !ONE_PROCESS>块。我在生成的httpd.conf文件中看到一个WSGIDaemonProcess指令。这是否意味着默认情况下已经在使用守护程序模式?
Kal

如果mod_wsgi-express start-server对mod_wsgi-express 使用或Django集成,则默认情况下它将以守护程序模式运行,并使用主解释器。因此,在这种情况下这不是问题。如果您手动配置Apache,那么仍然是一个问题。该ONE_PROCESS零件仅用于当您将其强制进入调试模式时,在这种情况下,它将以单进程嵌入式模式运行。它仍然在主解释器中运行。
格雷厄姆·邓普顿

application-group上选项WSGIScriptAlias是使用替代WSGIApplicationGroup
格雷厄姆·邓普顿

3

适合我配置WSGI方式的另一个解决方案是更改WSGIScriptAlias生产线:

WSGIDaemonProcess website user=user group=group python-path=/path/to/venv/website:/path/to/venv/lib/python2.7/site-packages
WSGIScriptAlias /website /path/to/venv/website/wsgi.py process-group=website application-group=%{GLOBAL}

<Location /website>
        WSGIProcessGroup website
</Location>

<Directory /path/to/venv/website>
        WSGIScriptReloading On
        <Files wsgi.py>
                Allow from all
                Require all granted
        </Files>
</Directory>

注意属性

process-group=website application-group=%{GLOBAL}

通常不需要


1
您可以删除WSGIScriptReloading指令,因为该指令默认为on,并且通常不需要关闭。由于使用了WSGIScriptAlias的process-group选项,因此您也可以删除WSGIProcessGroup指令。
Graham Dumpleton 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.