【发布时间】:2012-08-04 21:58:38
【问题描述】:
我正在编写一个可通过网络访问的 python 脚本,因此会有多个用户尝试同时附加到同一个文件。我担心这可能会导致竞争条件,如果多个用户同时写入同一个文件,它可能会损坏文件。
例如:
#!/usr/bin/env python
g = open("/somepath/somefile.txt", "a")
new_entry = "foobar"
g.write(new_entry)
g.close
我是否必须为此使用锁定文件,因为此操作看起来有风险。
【问题讨论】:
-
也许你可以只使用系统日志?
-
如果您使用的是 Linux 或其他 Unix,
mkfifo可能是一个有趣的选择。mkfifo创建一个 FIFO 特殊文件。任何人都可以随机写入文件,然后一个进程从 FIFO 中读取。这样你就不需要使用文件锁定了。 -
如果您使用
O_APPEND打开,目标文件系统是 POSIX 兼容的,并且您的写入都足够短,可以在单个系统调用中完成,首先不会有损坏。
标签: python concurrency text-files simultaneous simultaneous-calls