Scipy를 설치 한 후 응답하지 않는 아파치 + mod_wsgi


10

현재 Apache 2.2.15 및 mod_wsgi 3.2와 함께 Centos 6.4 서버를 실행하고 있습니다. 서버가 장고 기반 사이트 (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 쉘을 통해 모델 등을로드하면 모든 것이 잘 작동하므로 mod_wsgi 문제라고 생각하게됩니다.

이 문제를 해결하는 방법에 대한 생각이 있습니까?

답변:


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의 경우입니다. 따라서 데몬 모드를 사용하여 각각 자체 프로세스에 있도록하고 각 데몬 모드 프로세스 그룹의 기본 인터프리터에서 각각 실행되도록하십시오.


안녕하세요 Graham, 최신 버전의 mod-wsgi와 관련하여이 답변을 업데이트 할 수 있습니까? 특히 mod_wsgi-express를 사용하여 아파치를 구성한 경우 기본적으로 이것이 문제가됩니까? 생성 된 httpd.conf파일에서 WSGIApplicationGroup사용되지 않습니다. 그러나이 application-group=${GLOBAL}<IfDefine ONE_PROCESS><IfDefine !ONE_PROCESS>블록. 생성 된 httpd.conf파일 에 WSGIDaemonProcess 지시문이 있습니다. 기본적으로 이미 데몬 모드를 사용하고 있다는 의미입니까?
Kal

당신이 사용하는 경우 mod_wsgi-express start-server또는 장고 통합은 기본적으로 데몬 모드로 실행되며 주요 인터프리터를 사용 mod_wsgi에-표현한다. 따라서이 경우에는 문제가되지 않습니다. Apache를 수동으로 구성해도 여전히 문제가됩니다. ONE_PROCESS부분은 당신이 하나의 프로세스 포함 된 모드로 실행되는 경우 디버그 모드로 강제하는 경우에만 해당됩니다. 그래도 여전히 주요 통역사에서 실행됩니다.
Graham Dumpleton

application-group에 옵션 WSGIScriptAlias사용에 대한 대안입니다 WSGIApplicationGroup.
Graham Dumpleton

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 지시문을 기본값으로 설정하고 일반적으로 해제 할 필요가 없으므로이를 삭제할 수 있습니다. WSGIScriptAlias에 프로세스 그룹 옵션을 사용하기 때문에 WSGIProcessGroup 지시문을 삭제할 수도 있습니다.
Graham Dumpleton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.