2009-02-14 21 views
3

J'utilise mod-wsgi avec django, et dans django j'utilise pylucene pour faire une recherche plein texte.jcc.initVM() ne retourne pas lorsque mod_wsgi est configuré en mode démon

Alors que mod-wsgi est configuré pour être en mode intégré, il n'y a aucun problème. Mais quand mod-wsgi est configuré pour être en mode démon, l'apache reste coincé, et le navigateur continue à charger mais rien ne s'affiche. Puis j'identifie le problème à jcc.initVM(). Voici mon script wsgi:

import os, sys, jcc 
sys.stderr.write('jcc.initVM\n') 
jcc.initVM() 
sys.stderr.write('finished jcc.initVM\n') 
.... 

Après avoir redémarrer mon apache, et faire une demande de mon navigateur, je trouve que /var/log/apache2/error.log a seulement:

jcc.initVM 

Cela signifie qu'il est bloqué sur la ligne jcc.initVM(). (Si le mod_wsgi est configuré en mode intégré, il n'y a pas de problème.)

Et voici mon/etc/apache2/sites disponibles/default:

WSGIDaemonProcess site user=ross group=ross threads=1 
WSGIProcessGroup site 
WSGIScriptAlias//home/ross/apache/django.wsgi 

<Directory /home/ross/apache/> 
    Order deny,allow 
    Allow from all 
</Directory> 

Et enfin, je trouve que dans le code source de jcc (jcc.cpp), il se bloque à la fonction:

JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args) 

Comment résoudre le problème?

versions du programme:

libapache2-mod-wsgi 2.3-1 
jcc 2.1 
python 2.5 
Apache 2.2.9-8ubuntu3 
Ubuntu 8.10 

Répondre

1

Le correctif pour ce problème a été inclus dans mod_wsgi 2.4.

1

S'il vous plaît se référer à http://code.google.com/p/modwsgi/issues/detail?id=131 pour les détails de la discussion. En bref, le mod_wsgi va bloquer les signaux pour le programme démon, ce qui peut empêcher initVM de fonctionner. En outre, selon Andi à partir de jcc, initVM ne peut être appelé qu'à partir du thread principal, et cela peut également causer d'autres problèmes.

J'ai donc décidé de déplacer le code de recherche avec initVM() vers un processus totalement séparé et résolu le problème.