python - 文件锁定似乎不起作用(flock/lockf)

标签 python linux posix

在我的项目中,我们有一些启动应用程序的脚本,进行一些性能测试,然后终止应用程序。问题是有时脚本会发生一些不好的事情,比如崩溃。然后我们的应用程序“悬而未决”。

我想通过将 pid 值写入包含应用程序 pid/pids 的文件来解决这个问题,但为了正确地做到这一点(我认为)我想做这样的事情:

lock the file
process the pid/pids
clean file entries
unlock the file

然后我搜索了如何在 Python 2.7 中锁定文件(因为我们用它来编写我们的脚本),所以我发现了 https://docs.python.org/2/library/fcntl.htmlflocklockf 方法,但我认为我做错了什么。

我想测试这些方法是否正常工作,所以我做了:

echo "test" > testFile
(open repl)
>>> import fcntl
>>> f = open("testFile", "rw")
>>> fcntl.flock(f, fcntl.LOCK_EX)

即使我锁定了文件(或者至少我认为我锁定了)我也能做到

echo "aaa" >> testFile

在其他终端 session 中成功,文件已更改,没有错误。

如果有我应该使用的特定于操作系统的技巧(但我怀疑 python 标准库不能以可移植的方式处理锁定)这需要在 Linux 上工作。

最佳答案

默认情况下,文件锁是建议性的,这意味着它们仅在所有进程合作时才起作用,即它们会在尝试 I/O 之前检查文件是否已锁定。没有什么可以阻止进程忽略建议锁并只写入文件。

还有强制锁,系统通过强制锁强制其他进程尊重锁。这可能是您想要的,应该在谷歌上搜索“mandatory locks linux”以获取详细信息,其中主要涉及使用一些参数安装有问题的文件系统。

关于python - 文件锁定似乎不起作用(flock/lockf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767772/

相关文章:

python - PyQt5 网格布局为大部件扩展,但不为小部件收缩

python - 使用 re.findall 捕捉单词

c++ - 在 linux 中播放 wav 文件

linux - 使用 pentaho 作业加密密码并存储在文件中

linux - 如何直接从 git bash 创建一个 github 存储库?

c - 如何在 c 中结束重定向的 execlp

python - visual studio 代码 Unresolved 导入?

Python expandtabs 字符串操作

linux - 进程完成后的 CPU 时间

c - 用于进程内线程通信的posix队列与自定义0复制队列