Python的多个用户追加到相同的文件在同一时间(Python Multiple users app

2019-06-26 20:04发布

我的工作,将通过网络访问的python脚本,所以会有多个用户试图在同一时间将追加到同一个文件。 我担心的是,这可能导致在那里,如果多个用户在同一时间写信给同一个文件中的竞争条件,它只是可能会损坏文件。

例如:

#!/usr/bin/env python

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

我将不得不使用一个锁文件的这个,因为这看起来操作风险。

Answer 1:

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.



Answer 2:

根据您的平台/文件系统中的位置,这可能不是以安全的方式(如NFS)是可行的。 也许你可以事后写信给不同的文件和合并的结果?



Answer 3:

你没有使用什么平台状态,但这里是你可以使用一个模块是跨平台: 文件在Python锁定



Answer 4:

如果你在Linux上做这个动作,缓存大小大于4KB小,写操作是原子的,你应该是好的。

更读到这里: 是文件中的UNIX追加原子?



文章来源: Python Multiple users append to the same file at the same time