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