如何解决python ilock FileNotFoundError



所以我试图在python中使用ilock作为系统范围的锁,但在我的代码中经过几次迭代后,我得到了以下错误,是什么导致了这样的错误?以及我如何开始解决

FileNotFoundError:[Erno 2]没有这样的文件或目录:'/tmp/ilock-bfe0d208735d8d5f20bb2b8abcf8bf67d696f23629b4e2d4e7304f69063db61.lock'

我看到了同样的错误。在我看来,这是ilock图书馆里的一个bug。

简而言之,当使用相同的唯一名称创建两个ILock对象时,它们将使用与锁定实体相同的文件(传递给portalocker(。他们在ILock.__enter__上使用open(path, 'w')创建文件(如果不存在(,在ILock.__exit__上调用os.unlink(path)

但是,请考虑以下情况:

process1: ILock.__enter__  # file is created, lock acquired
process2: ILock.__enter__  # file already exists, lock pending
process1: does its thing under the lock
process1: ILock.__exit__   # file is unlinked, lock released
process2: does its thing under the lock
process2: ILock.__exit__   # Error: cannot unlink, file does not exist

从表面上看,这可能是可以通过静默地允许unlink失败来解决的;或者在获取锁之后根据需要重新创建文件。不过,我不确定portalocker在这种情况下是否会表现得很好。

也许最简单的解决方法是永远不要删除文件(完全删除os.unlink(。

相关内容

  • 没有找到相关文章

最新更新