我正在开发一个可以通过网络访问的python脚本,因此会有多个用户同时尝试附加到同一个文件。我担心这可能导致竞争条件,如果多个用户同时写入同一文件,它可能会损坏文件。
例如:
#!/usr/bin/env python
g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close
我是否必须使用锁定文件,因为此操作看起来很危险。
答案 0 :(得分:25)
您可以使用file locking:
import fcntl
new_entry = "foobar"
with open("/somepath/somefile.txt", "a") as g:
fcntl.flock(g, fcntl.LOCK_EX)
g.write(new_entry)
fcntl.flock(g, fcntl.LOCK_UN)
请注意,在某些系统上,如果只编写小缓冲区,则锁定不,因为appends on these systems are atomic。
答案 1 :(得分:0)
你没有说明你使用的平台,但这里有一个你可以使用的跨平台模块: File locking in Python
答案 2 :(得分:0)
根据您的平台/文件系统位置,这可能无法以安全的方式进行(例如NFS)。也许您可以写入不同的文件并在之后合并结果?
答案 3 :(得分:0)
如果您在Linux上执行此操作,并且缓存大小小于4KB,则写入操作是原子的,您应该很好。
更多内容请点击此处: Is file append atomic in UNIX?