В настоящее время я использую сервер Centos 6.4 с Apache 2.2.15 и mod_wsgi 3.2. На сервере размещен сайт на основе django (django 1.5.1, python 2.6.6). Все работало нормально, пока я не установил scipy 0.12.0 через pip. Теперь, когда я пытаюсь загрузить приложение django, сервер не отвечает, и кажется, что порожденные дочерние процессы httpd зависают. Просмотр моих журналов (/ var / logs / httpd / error_log, мой vhost error.log и мои системные журналы) не дает ошибок.
Если я загружаю свои модели и т. Д. Через оболочку django manage.py, все работает нормально, что наводит меня на мысль, что это проблема с mod_wsgi.
Есть мысли о том, как начать устранение неполадок?
Некоторые сторонние пакеты для Python, которые используют модули расширения C, в том числе scipy и numpy, будут работать только в основном интерпретаторе Python и не могут использоваться во вспомогательных интерпретаторах, поскольку по умолчанию используется mod_wsgi. Результатом может быть взаимоблокировка потоков, неправильное поведение или сбои процессов. Это подробно описано в:
http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API
Обходной путь - заставить приложение WSGI запускаться в основном интерпретаторе процесса, используя:
WSGIApplicationGroup %{GLOBAL}
Если вы запускаете несколько приложений WSGI на одном сервере, вы можете начать исследование, используя режим демона, потому что некоторые платформы не позволяют запускать несколько экземпляров в одном интерпретаторе. Так обстоит дело с Django. Таким образом, используйте режим демона, чтобы каждый был в своем собственном процессе, и заставьте каждого работать в основном интерпретаторе их соответствующих групп процессов режима демона.
Другим решением, подходящим моему способу настройки 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}
которые обычно не требуются