【发布时间】:2014-01-14 23:18:26
【问题描述】:
我正在编写一个脚本,该脚本需要对任何给定文件执行安全写入,即,如果已知没有其他进程正在写入文件,则附加一个文件。我对该理论的理解是,在文件系统上使用写锁可以防止并发写入,但在实践中似乎并非如此。
以下是我设置测试用例的方式: 我正在重定向 ping 命令的输出:
ping 127.0.0.1 > fileForSafeWrites.txt
另一方面,我有以下 python 代码尝试写入文件:
handle = open('fileForSafeWrites.txt', 'w')
handle.write("Probing for opportunity to write")
handle.close()
同时运行两个进程优雅地完成。我看到 fileForSafeWrites.txt 已经变成了一个包含二进制内容的文件,而不是第一个进程发出的写锁,以防止它被 Python 代码写入。
我如何强制我的一个或两个并发进程不相互干扰?我读过人们建议能够获取写入文件句柄作为文件被写入安全的证据,比如在https://stackoverflow.com/a/3070749/1309045
此行为是否特定于我的操作系统和 Python。我在 Ubuntu 12.04 环境下使用 Python2.7。
【问题讨论】:
-
您在哪里获取文件的锁定?在类似 UNIX 的操作系统中,两个文件同时写入一个文件是完全可以接受的,除非您明确阻止它,否则这正是将发生的情况。
-
谢谢,我没有获得锁。我期待前一个进程对第二个进程发出写锁。我被 stackoverflow.com/a/3070749/1309045 误导了。如果你说的是真的,那么stackoverflow.com/questions/3070210/…的答案是什么
标签: python unix file-io operating-system ubuntu-12.04