我的工作,将通过网络访问的python脚本,所以会有多个用户试图在同一时间将追加到同一个文件。 我担心的是,这可能导致在那里,如果多个用户在同一时间写信给同一个文件中的竞争条件,它只是可能会损坏文件。
例如:
#!/usr/bin/env python
g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close
我将不得不使用一个锁文件的这个,因为这看起来操作风险。
我的工作,将通过网络访问的python脚本,所以会有多个用户试图在同一时间将追加到同一个文件。 我担心的是,这可能导致在那里,如果多个用户在同一时间写信给同一个文件中的竞争条件,它只是可能会损坏文件。
例如:
#!/usr/bin/env python
g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close
我将不得不使用一个锁文件的这个,因为这看起来操作风险。
You can use 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)
Note that on some systems, locking is not needed if you're only writing small buffers, because appends on these systems are atomic.
根据您的平台/文件系统中的位置,这可能不是以安全的方式(如NFS)是可行的。 也许你可以事后写信给不同的文件和合并的结果?
你没有使用什么平台状态,但这里是你可以使用一个模块是跨平台: 文件在Python锁定
如果你在Linux上做这个动作,缓存大小大于4KB小,写操作是原子的,你应该是好的。
更读到这里: 是文件中的UNIX追加原子?