- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在文档导入方法中,我处理大量文件。每个文件大小也可以100mb-200mb。我想异步使用线程。在for循环中,每个文件都会被处理然后被索引(lucene)。这种操作在实时情况下非常耗费成本和时间。整体运作不能停止。
导入方法的总体结构如下:
public void docImport()
{
ExecutorService executor = Executors.newFixedThreadPool(5);
for(final File file : fileList)
{
//Do some works...
executor.execute(new Runnable() {
@Override
public void run() {
zipFile(file); //Each zipped file has diff name and same directory.
indexFile(file); //Each file is indexed same directory.
}
});
}
executor.shutdown();
}
indexFile方法的一般结构:
public void indexFile()
{
ExecutorService executor = Executors.newFixedThreadPool(1);
IndexWriter writer = null;
Directory dir = .....;
Analyzer analyzer = new StandardAnalyzer(LUCENE_VERSION);
IndexWriterConfig iwc = new IndexWriterConfig(LUCENE_VERSION, analyzer);
iwc.setRAMBufferSizeMB(200);
iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
writer = new IndexWriter(dir, iwc);
Document lucenedoc = new Document();
lucenedoc.add(..);
if (writer.getConfig().getOpenMode() == IndexWriterConfig.OpenMode.CREATE) {
writer.addDocument(lucenedoc);
} else {
writer.updateDocument(new Term(PATH, innerPath), lucenedoc);
}
executor.shutdown();
}
我的问题是:
当 docImport 方法工作时,5 个线程读取文件,每个线程都尝试将文件索引到同一个 lucene 索引文件。所以错误发生了一些间隔:“org.apache.lucene.store.LockObtainFailedException:锁定获取超时:NativeFSLock@C:\lucene\index\write.lock”
例如,有时 100 个文件中会索引 30 个文件。其他内容因错误而未编入索引。
如何解决此错误?我该如何处理这个问题?
最佳答案
当索引上已经有一个打开的写入器时,当您尝试打开 IndexWriter
时,您会收到此错误。
除了这个问题之外,打开一个新的 IndexWriter
是一个非常昂贵的操作。即使您要让它工作(例如同步打开、使用然后关闭 IndexWriter 的 block ),这可能会非常慢。
相反,打开一个 IndexWriter
,保持打开状态,并在每个线程之间共享它。
关于java - 执行者服务中的执行者服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23483150/
所以我有一个排行榜,我每天使用以下查询有效地获取每个用户的分数: SELECT DATE(a.time) as time, a.userid, SUM(activity_weight) as weig
假设我有一个 ExecutorService(它可以是一个线程池,因此涉及到并发性),它在不同的时间执行一个任务,或者周期性地或者响应一些其他条件。要执行的任务如下: 如果此任务已在进行中,则什么也不
我正在运行的服务器应用程序收到多个任务请求,我想使用任务系统处理这些请求。 每个任务都表示为一个 Runnable,它将从线程池中请求 n 个线程,其中 n 小于或等于线程池大小。为了不线程过多导致
我有一个 long_task 函数,它运行大量 cpu 绑定(bind)计算,我想通过使用新的 asyncio 框架使其异步。生成的 long_task_async 函数使用 ProcessPoolE
Java 文档说 CompletableFuture:supplyAsync(Supplier supplier)在 ForkJoinPool#commonPool() 中运行任务而 Completa
我想了解 Spark Streaming 中的一个基本知识。我有 50 个 Kafka 主题分区和 5 个执行程序,我使用的是 DirectAPI,所以没有。 RDD 分区的数量将为 50。如何在 5
我的问题与 this one here 密切相关.正如在那里发布的那样,我希望主线程等到工作队列为空并且所有任务都已完成。然而,我的情况的问题是,每个任务都可能递归地导致提交新任务进行处理。这使得收集
我是一名优秀的程序员,十分优秀!