Apache não responsivo + mod_wsgi após a instalação do scipy

10

Atualmente estou executando um servidor Centos 6.4, com Apache 2.2.15 e mod_wsgi 3.2. O servidor está hospedando um site baseado em django (django 1.5.1, python 2.6.6). Tudo estava correndo bem até que eu instalei 0.12.0 scipy via pip. Agora, quando eu tento carregar o aplicativo django, o servidor não responde, e parece que os processos httpd filho que são gerados travar. Examinar meus logs (/ var / logs / httpd / error_log, meu vhost error.log e meus logs de sistema) não gera erros.

Se eu carregar meus modelos, etc. através do shell django manage.py, tudo funciona bem, o que me leva a acreditar que é um problema do mod_wsgi.

Alguma idéia de como começar a solucionar isso?

    
por MarkD 07.06.2013 / 23:11

2 respostas

18

Alguns pacotes de terceiros para Python que usam módulos de extensão C, e isso inclui scipy e numpy, só funcionam no interpretador principal do Python e não podem ser usados em sub intérpretes como mod_wsgi por uso padrão. O resultado pode ser impasse de thread, comportamento incorreto ou falhas de processo. Eles estão detalhados em:

link

A solução alternativa é forçar o aplicativo WSGI a ser executado no interpretador principal do processo usando:

WSGIApplicationGroup %{GLOBAL}

Se estiver executando vários aplicativos WSGI no mesmo servidor, você deverá começar a investigar usando o modo daemon porque algumas estruturas não permitem que várias instâncias sejam executadas no mesmo interpretador. Este é o caso do Django. Portanto, use o modo daemon para que cada um esteja em seu próprio processo e force cada um a ser executado no intérprete principal de seus respectivos grupos de processos do modo daemon.

    
por 08.06.2013 / 00:26
2

Outra solução que se ajusta à minha maneira de configurar o WSGI foi alterar a WSGIScriptAlias line:

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>

observe os atributos

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

que geralmente não são necessários

    
por 07.06.2015 / 23:29