python文件锁模块删除文件

python文件锁模块删除文件,python,python-2.7,filelock,Python,Python 2.7,Filelock,我下载了该模块,以便使用python程序锁定文件。 这是我的代码: import filelock lock = filelock.FileLock(path) lock.acquire() #do something... lock.release() 由于某种原因,我不明白当我释放锁时,文件会被删除。 有人知道怎么处理吗?释放锁后,如何保持文件可用? 如果相关,我的文件保存在单独的硬盘上。 多谢各位 我使用的是windows 10 pro我不知道为什么,但文档表明它不应该像您所经历的那样。

我下载了该模块,以便使用python程序锁定文件。 这是我的代码:

import filelock
lock = filelock.FileLock(path)
lock.acquire()
#do something...
lock.release()
由于某种原因,我不明白当我释放锁时,文件会被删除。 有人知道怎么处理吗?释放锁后,如何保持文件可用? 如果相关,我的文件保存在单独的硬盘上。 多谢各位


我使用的是windows 10 pro

我不知道为什么,但文档表明它不应该像您所经历的那样。但是,如果您在windows上使用此功能,您可以查看释放锁的实现,您会意识到,如果文件是最终锁或锁被强制释放,它确实会删除该文件。请查看“”部分

windows锁定的底层实现使用以下发布代码:

def _release(self):
    msvcrt.locking(self._lock_file_fd, msvcrt.LK_UNLCK, 1)
    os.close(self._lock_file_fd)
    self._lock_file_fd = None

    try:
        os.remove(self._lock_file)
    # Probably another instance of the application
    # that acquired the file lock.
    except OSError:
        pass
    return None

如您所见,os.remove将删除该文件。尽管这没有帮助,但希望能解释为什么会发生这种情况。可能是有人忘记删除的错误或陈旧代码。

这在Windows中对我有效,也应该对您有效

这个库的用例表示一个库的不同实例 应用程序,该共享资源当前已被访问。对于 示例:某些同步程序在同步过程中创建锁定文件 在根文件夹中进行同步以防止其他实例 同时做这件事。一旦锁文件被删除, 另一个实例启动同步进程

如果要避免竞争条件,可以使用此库 像这样:

lock=FileLock(flnm+“.lock”)和lock.acquire(超时=5):
打开(flnm,“a”)作为文件: file.write(“一些文本”)

或者看看底层操作系统功能:

编辑:删除文件是作为清理的一部分故意进行的


您在哪个操作系统上执行此操作?@PawełKordowski context manager?请参阅注意:传递给文件锁的“路径”不是您要控制访问的实际文件。这是一条任意路径,象征性地表示某些资源被锁定。在许多情况下,如果资源是文件或目录,则锁定路径具有相同的名称,但扩展名为
.lock
,但这只是惯例。在其他情况下,锁位于/var/lock/某处。请记住,这是“建议锁定”:访问要保护的文件的所有代码都必须使用相同的锁定文件路径。锁文件路径甚至可以表示您不希望并行发生的任意事件。您知道我可以用什么方法覆盖它吗?我不能将文件保存在临时文件中,因为它们很大。现在,为什么会发生这种情况?这看起来很奇怪…我在我的Mac电脑上测试过,一切正常。文件仍然存在。@IsaacDj我建议最好的方法是与模块开发人员进一步讨论这个问题。这可能是一个可能被忽略的缺陷,或者至少您可能会得到一个合理的解释,解释为什么会这样以及如何解决它。@siphr锁也会删除文件内容的原因是什么?如果您的意思是,当创建或获取锁时,它会很好地清空文件的内容这是因为模块使用truncate标志创建锁文件。这意味着文件(如果已经存在)将始终被截断(清空)。