附加到并发环境中的文件末尾

Nev*_*DNZ 3 python linux append

如果以下多个(示例)程序同时运行,则需要采取哪些步骤来确保始终将"完整"行正确附加到文件末尾.

#!/usr/bin/env python
import random
passwd_text=open("passwd.txt","a+")
u=("jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,jsmith@rosettacode.org:/home/jsmith:/bin/sh",
  "jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,jdoe@rosettacode.org:/home/jdoe:/bin/sh",
  "xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/sh")
for i in range(random.randint(1,2)):
  print >> passwd_text, random.choice(u)
passwd_text.close()
Run Code Online (Sandbox Code Playgroud)

并且:即使磁盘已满,或者"ulimit -f"已设置,是否可以保证"全部或全部"附加(在linux/unix上)?

(请注意类似的问题:如何附加到文件?)

hwj*_*wjp 8

我认为在python的正常函数中对这个"bug"的讨论open表明你没有获得POSIX原子保证,但如果你使用

with io.open('myfile', 'a') as f:
    f.write('stuff')
Run Code Online (Sandbox Code Playgroud)

http://docs.python.org/2/library/io.html#io.open

如果操作系统正确实现其write sys调用...

http://bugs.python.org/issue15723