我目前正在运行一个Centos 6.4服务器,Apache 2.2.15和mod_wsgi 3.2。 服务器托pipe一个基于django的网站(django 1.5.1,python 2.6.6)。 一切都运行良好,直到我通过点安装scipy 0.12.0。 现在,当我尝试加载django应用程序时,服务器不响应,并且似乎挂起的子httpd进程。 查看我的日志(/ var / logs / httpd / error_log,我的虚拟主机error.log和我的系统日志)不会产生错误。
如果我通过django manage.py shell加载我的模型等,一切工作正常,这使我相信这是一个mod_wsgi问题。
任何想法如何开始解决这个问题?
某些使用C扩展模块(包括scipy和numpy)的Python第三方软件包只能在Python主解释器中使用,并且在默认情况下不能在子解释器中用作mod_wsgi。 结果可能是线程死锁,不正确的行为或进程崩溃。 这些在以下详细描述:
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
解决方法是使用以下命令强制WSGI应用程序在进程的主解释器中运行:
WSGIApplicationGroup %{GLOBAL}
如果在同一台服务器上运行多个WSGI应用程序,则需要开始调查使用守护进程模式,因为某些框架不允许多个实例在同一个解释器中运行。 Django就是这种情况。 因此,使用守护进程模式,这样每个进程都在自己的进程中,并强制每个守护进程模式进程组的主解释器运行。
另一个适合我configurationWSGI的解决scheme是改变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}
这通常不是必需的