gpt4 book ai didi

multithreading - Lucene.Net 和 I/O 线程问题

转载 作者:行者123 更新时间:2023-12-04 15:05:34 25 4
gpt4 key购买 nike

我有一个名为“Execute()”的索引函数,它使用 IndexWriter 来索引我网站的内容。如果我只是从网页中调用它,它会很好用,但是当我将它作为 System.Threading.Thread 的委托(delegate)参数时失败了。奇怪的是,它总是在我的本地开发机器上工作,只有当我上传到共享主机时它才会失败。

这是我收到的错误消息

“锁定获取超时:SimpleFSLock 错误....”

以下是失败的代码(但仅在共享主机上失败)

Scheduler scheduler = new Scheduler();
System.Threading.Thread schedulerThread = new System.Threading.Thread(scheduler.Execute);

下面是有效的代码(在我的本地机器和共享主机上工作)
Scheduler scheduler = new Scheduler();
schedulre.Execute();

现在,有些人说,这可能是上次调试 session 留下的不好的东西,所以在我实例化 IndexWriter 之前,我做了
if (IndexReader.IsLocked(indexingFolder))
{

log.Debug("it is locked");
IndexReader.Unlock(FSDirectory.GetDirectory(indexingFolder));
}
else
{
log.Debug("it is not locked");
}

你猜怎么着?我的日志说,它没有被锁定。

所以现在我很确定它是由 System.Thread.Threading 引起的,但我不知道如何修复它。

谢谢

最佳答案

检查在共享主机上,线程对索引文件夹的权限与您在开发机器/共享主机上的权限相同。

更新:你可以找到Principal通过询问线程的 CurrentPrincipal 来运行线程属性(property)。虽然这是一个读写属性,但您可能没有权限在共享主机环境中设置此属性。

您可能会发现 this post有帮助。

关于multithreading - Lucene.Net 和 I/O 线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com