我已经下载了filelock模块,以便使用我的python程序锁定文件。 这是我的代码:
import filelock
lock = filelock.FileLock(path)
lock.acquire()
#do something...
lock.release()
由于某种原因,我不明白当我释放锁定时文件被删除。 有谁知道如何处理这个?锁定发布后如何保持文件可用? 如果它是相关的,我的文件保存在一个单独的硬盘驱动器上。 谢谢。
我使用的是Windows 10专业版
答案 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
编辑:删除文件是故意清理的一部分。