猿问

如果我们在两个不同的终端中以写入模式打开一个文件并尝试同时写入它们会怎样?

f=open("text.txt","w")

f.write("What is this?")

在新终端中:


x=open("text.txt","w")

x.write("I am going to do the same.")

x.close()

然后我尝试读取并打印文件的内容:


x=open("text.txt","r")

print(x.read())

What is this? do the same. #this is the output. I want to understand how this happened.


繁星点点滴滴
浏览 106回答 1
1回答

饮歌长啸

这里发生的事情是,在您的第一个会话中,在您完成f.write(...). (请注意,您还没有关闭该文件。)在您的新终端中,您使用起始文件指针 0 写入文件,然后输出缓冲区被完全刷新到文件,因为您关闭了文件。如果您在完成此操作后立即检查输出文件,那么您会发现内容只是I am going to do the same.. 但是,一定是在您检查文件时,您已经从第一个会话中清除了缓冲区的内容——这可能是因为您已经退出了 python 会话,或者因为您已经完成了显式f.close()或f.flush(). 这将导致缓冲What is this?被写入文件。但是起始文件指针也是 0,因为第一个会话中的原始文件open会将其定位在开头(也会截断任何现有内容)。所以它会覆盖之前的部分I am going to do the same.,导致观察到的行为。如果您有两个进程都附加到同一个文件并且您希望确保避免写入冲突,那么您需要执行以下操作:a或r+模式打开文件当一个进程想要写入时,它必须:等待文件的独占锁寻找文件的末尾写输出刷新输出释放锁但是文件锁定的细节超出了这个问题的范围。
随时随地看视频慕课网APP

相关分类

Python
我要回答