在我的项目中,我们有一些启动应用程序的脚本,进行一些性能测试,然后终止应用程序。问题是有时脚本会发生一些不好的事情,比如崩溃。然后我们的应用程序“悬而未决”。
我想通过将 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.html和 flock
和 lockf
方法,但我认为我做错了什么。
我想测试这些方法是否正常工作,所以我做了:
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/