PyLucene的初始化辅助和简单包装器
项目描述
lucene模块包装器
lucene模块包装器负责处理JCC API中的初始化和线程陷阱。当从外观模块检索第一个对象时,它会自动初始化虚拟机。如果PyLucene已经初始化,外观模块会确保当前线程已附加。
包装器还解决了JVM安装其自己的信号处理程序的问题。默认情况下,JVM在initVM()中覆盖Python的信号处理程序,从而导致一些难以调试的问题。例如,SIGINT不再转换为KeyboardInterrupt异常。包装器代码将所有信号处理程序恢复到其原始状态。仅保留JVM的SIGSEGV处理程序,因为当JVM段错误时,它会记录并打印有用的信息。
classpath参数是可选的。如果没有设置classpath,smc.lucene会自动为您添加classpath=lucene.CLASSPATH。
示例1 - 按需初始化Lucene
替换如下代码
import lucene lucene.initVM(classpath=lucene.CLASSPATH, vmwargs='...') def query_lucene(...): lucene.attachCurrentThread() query = lucene.BooleanQuery() ...
为
from smc.lucene import lucene lucene.set_initargs(vmargs='...') def query_lucene(...): query = lucene.BooleanQuery()
当从外观模块检索BooleanQuery属性时,会自动初始化Lucene。如果PyLucene已经初始化,外观模块会确保当前线程已附加。
您不能将Lucene属性分配给跨线程共享的对象。如果您必须跨线程共享对象,您必须在使用对象之前调用lucene.attach()。
示例2 - 显式初始化Lucene
示例
from smc.lucene import lucene as lucene_wrapper from lucene import BooleanQuery def query_lucene(...): lucene_wrapper.attach() query = BooleanQuery()
attach方法要么初始化lucene,要么附加当前线程。
版权
版权 (C) 2008 semantics GmbH。版权所有。
semantics Kommunikationsmanagement GmbH Viktoriaallee 45 D-52066 Aachen Germany Tel.: +49 241 89 49 89 29 eMail: info(at)semantics.de http://www.semantics.de/