我在基于 django 的站点中使用 pylucene,我想知道是否有人知道启动 jvm 和附加线程的最佳位置在哪里。我不想每次有人加载页面时都必须启动一个新的 jvm,但是当我在搜索时附加线程时,我偶尔会在 django 中遇到神秘的“无法导入名称”错误。
在views.py中附加线程是错误的吗?
编辑:我正在专门寻找一种方法来实例化单个 jvm 并让它运行,这样我就可以根据需要将线程附加到它。实例化 jvm 大约需要两秒钟,这是搜索时明显的延迟。
我从未在 Django 中使用过 pylucene,但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
. 据我所知,您的原始设置文件只会在服务器启动时加载一次