Python 2.7 在使用`分叉时,Python文件写入两次`
输出让我感到困惑:Python 2.7 在使用`分叉时,Python文件写入两次`,python-2.7,file,fork,Python 2.7,File,Fork,输出让我感到困惑: import os m = 'foo\n' n = 'bar\n' with open('test2.txt', 'w') as f: f.write(m) os.fork() f.write(n) 但是,我期望的是: foo bar foo bar 然后,我更改了打开文件的方式: foo bar bar 正如我所预料的那样 当fork时,是否存在问题?默认情况下Python缓冲文件,当您fork时,如果缓冲区尚未刷新,则两个进程都会认为
import os
m = 'foo\n'
n = 'bar\n'
with open('test2.txt', 'w') as f:
f.write(m)
os.fork()
f.write(n)
但是,我期望的是:
foo
bar
foo
bar
然后,我更改了打开文件的方式:
foo
bar
bar
正如我所预料的那样
当
fork
时,是否存在问题?默认情况下Python缓冲文件,当您fork时,如果缓冲区尚未刷新,则两个进程都会认为它们负责稍后刷新缓冲区,包括fork之前的部分。如果在fork之前添加显式调用以刷新流:
import os
m = 'foo\n'
n = 'bar\n'
fd = os.open('test2.txt', os.O_RDWR)
os.write(fd, m)
os.fork()
os.write(fd, n)
os.close(fd)
然后
foo
将被写入该点,缓冲区将被清空,以便家长和新孩子都可以写入bar
,而无需携带foo
。是的,我找到了原因。谢谢
f.flush()