Python多个用户同时附加到同一文件

时间:2012-08-07 20:23:47

标签: python concurrency text-files simultaneous simultaneous-calls

我正在开发一个可以通过网络访问的python脚本,因此会有多个用户同时尝试附加到同一个文件。我担心这可能导致竞争条件,如果多个用户同时写入同一文件,它可能会损坏文件。

例如:

#!/usr/bin/env python

g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close

我是否必须使用锁定文件,因为此操作看起来很危险。

4 个答案:

答案 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?