Где лучше всего использовать initVM и attachCurrentThread при использовании пилицена в Django - PullRequest
4 голосов
/ 30 июня 2011

Я использую pylucene на сайте, основанном на django, и мне было интересно, знает ли кто-нибудь, где будет лучшее место для запуска jvm и присоединения потоков.Я не хочу запускать новую jvm каждый раз, когда кто-то загружает страницу, но я иногда получал загадочную ошибку «Cannot Import Name» в django, когда я подключал потоки во время поиска.

Является ли ошибкой прикреплять поток в views.py?

Редактировать : я специально ищу способ создания единственного jvm и оставить его работающимпоэтому я могу просто прикрепить к нему темы по мере необходимостиСоздание экземпляра jvm занимает около двух секунд, и это заметная задержка при поиске.

1 Ответ

4 голосов
/ 01 июля 2011

Я никогда не использовал pylucene в Django, хотя initVM() должен вызываться в файле, который в значительной степени загружается при запуске сервера Django (settings.py было бы хорошим местом).

О attachCurrentThread: Вопрос в том, где вы используете модуль lucene.Если это в views.py, то, конечно, сделайте это в views.py.Хотя я думаю, что вы не должны делать это при каждом вызове функции.Если вы используете основанные на классах общие представления Django, вы можете сохранить среду VM в переменной, специфичной для объекта.Вы пробовали это в глобальной области views.py?

Также имейте в виду, что при вызове attachCurrentThread всегда необходимо выполнить два шага:

vm_env = lucene.getVMEnv()
vm_env.attachCurrentThread()

Добавление (см. комментарии ниже):

Я думаю, это зависит от того, как вы импортируете настройки в свой проект.Если вы просто сделаете ìmport settings в своих приложениях, он загрузит модуль более одного раза.Вместо этого всегда делайте из django.conf import settings.Насколько я знаю, ваш исходный файл настроек будет загружен только один раз при запуске сервера

...