在我的项目中,我们有一些脚本启动应用程序,执行一些性能测试然后终止应用程序。问题是,有时脚本会发生一些不好的事情,比如崩溃。然后我们的应用程序“悬而未决”。
我想通过将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
以及{{1}方法,但我认为我做错了。
我想测试这些方法是否正常工作,所以我做了:
lockf
即使我锁定了文件(或者至少我认为我做了)我也可以
echo "test" > testFile
(open repl)
>>> import fcntl
>>> f = open("testFile", "rw")
>>> fcntl.flock(f, fcntl.LOCK_EX)
在其他终端会话中成功,文件被更改,没有错误。
如果有一个特定于操作系统的技巧我应该使用(但我怀疑python标准库无法以可移植的方式处理锁定)这需要在Linux上运行。
答案 0 :(得分:2)
默认情况下,文件锁是建议性的,这意味着它们仅在所有进程协作时才起作用,即它们在尝试I / O之前检查文件是否被锁定。没有什么能阻止进程忽略咨询锁并只是写入文件。
还有强制锁定,系统通过该锁定强制其他进程来遵守锁定。这可能是你想要的,应该谷歌“强制锁定linux”的细节,主要涉及用一些参数安装有问题的文件系统。