所以我试图在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
(。