4

我在基于 django 的站点中使用 pylucene,我想知道是否有人知道启动 jvm 和附加线程的最佳位置在哪里。我不想每次有人加载页面时都必须启动一个新的 jvm,但是当我在搜索时附加线程时,我偶尔会在 django 中遇到神秘的“无法导入名称”错误。

在views.py中附加线程是错误的吗?

编辑:我正在专门寻找一种方法来实例化单个 jvm 并让它运行,这样我就可以根据需要将线程附加到它。实例化 jvm 大约需要两秒钟,这是搜索时明显的延迟。

4

1 回答 1

4

我从未在 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. 据我所知,您的原始设置文件只会在服务器启动时加载一次

于 2011-07-01T05:36:37.200 回答