Mar*_*rkD 14 python mod-wsgi apache-2.2
我目前正在运行 Centos 6.4 服务器,Apache 2.2.15 和 mod_wsgi 3.2。服务器托管基于 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 问题。
关于如何开始解决这个问题的任何想法?
Gra*_*ton 29
一些使用 C 扩展模块的 Python 第三方包,包括 scipy 和 numpy,只能在 Python 主解释器中工作,不能在子解释器中使用,因为默认情况下使用 mod_wsgi。结果可能是线程死锁、不正确的行为或进程崩溃。这些在:
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
解决方法是使用以下方法强制 WSGI 应用程序在进程的主解释器中运行:
WSGIApplicationGroup %{GLOBAL}
Run Code Online (Sandbox Code Playgroud)
如果在同一台服务器上运行多个 WSGI 应用程序,您可能希望开始使用守护进程模式进行调查,因为某些框架不允许在同一个解释器中运行多个实例。Django 就是这种情况。因此使用守护进程模式,这样每个进程都在自己的进程中,并强制每个进程在各自守护进程模式进程组的主解释器中运行。
小智 5
另一个适合我配置 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>
Run Code Online (Sandbox Code Playgroud)
注意属性
process-group=website application-group=%{GLOBAL}
Run Code Online (Sandbox Code Playgroud)
通常不需要
| 归档时间: |
|
| 查看次数: |
11064 次 |
| 最近记录: |