jcc.initVM() не возвращается, когда mod_wsgi настроен как режим демона

StackOverflow https://stackoverflow.com/questions/548493

Вопрос

Я использую mod-wsgi с django, а в django я использую pylucene для полнотекстового поиска.

Хотя mod-wsgi настроен на встроенный режим, проблем не возникает.Но когда Mod-WSGI настроен как режим Daemon, Apache просто застрянет, а браузер просто продолжает загружать, но ничего не появляется.

Затем я идентифицирую проблему как jcc.initVM().Вот мой сценарий wsgi:

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

После того, как я перезапустил свой Apache и сделаю запрос из моего браузера, я обнаружил, что /Вар/log/apache2/error.log имеет только:

jcc.initVM

Это означает, что он застревает на строке jcc.initVM().(Если mod_wsgi настроен как встроенный режим, проблем нет.)

И вот мой файл /etc/apache2/sites-available/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>

И наконец обнаруживаю, что в исходном коде jcc (jcc.cpp) зависает на функции:

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

Как решить проблему?

Версии программы:

libapache2-mod-wsgi 2.3-1
jcc 2.1
python 2.5
Apache 2.2.9-8ubuntu3
Ubuntu 8.10
Это было полезно?

Решение

Исправление этой проблемы было включено в mod_wsgi 2.4.

Другие советы

Пожалуйста, обратитесь к http://code.google.com/p/modwsgi/issues/detail?id=131 для подробностей обсуждения.

Короче говоря, MOD_WSGI будет блокировать сигналы для программы Daemon, которая может сделать initVM не работать.Кроме того, согласно Andi из JCC, initVM может быть вызван только из основного потока, и это также может вызвать дальнейшую проблему.

Поэтому я решил перенести код поиска с помощью initVM() в совершенно отдельный процесс и решил проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top