python filelock模块删除文件

时间:2016-02-29 12:22:55

标签: python python-2.7 filelock

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

import filelock
lock = filelock.FileLock(path)
lock.acquire()
#do something...
lock.release()

由于某种原因,我不明白当我释放锁定时文件被删除。 有谁知道如何处理这个?锁定发布后如何保持文件可用? 如果它是相关的,我的文件保存在一个单独的硬盘驱动器上。 谢谢。

我使用的是Windows 10专业版

2 个答案:

答案 0 :(得分:3)

我不知道为什么,但文档表明它不应该做你正在经历的事情。但是,如果您在Windows上使用它,您可以查看释放锁的实现,并且您将意识到如果它是最终锁定或者强制释放锁定,它确实会删除该文件。请查看“Windows locking mechanism”部分。

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将删除该文件。即使这没有帮助,但希望能解释为什么会这样。可能是某人忘记删除的错误或陈旧代码。

答案 1 :(得分:0)

这对我在Windows中起作用,也适用于你benediktschmitt

  

您好,

     

这个库的用例正在发出不同的实例信号   应用程序,当前访问共享资源。对于   示例:某些同步程序在创建锁定文件期间   根文件夹中的同步以防止其他实例   同时做到这一点。一旦锁定文件被删除,   另一个实例启动同步进度。

     

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

     

lock = FileLock(flnm + ".lock") with lock.acquire(timeout=5):
with open(flnm, "a") as file: file.write("some text")

     

或者你看一下底层的os函数:   https://www.safaribooksonline.com/library/view/python-cookbook/0596001673/ch04s25.html

     

编辑:删除文件是故意清理的一部分。