为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星点点滴滴 2023-06-13 16:56:01
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.
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

这里发生的事情是,在您的第一个会话中,在您完成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.,导致观察到的行为。

如果您有两个进程都附加到同一个文件并且您希望确保避免写入冲突,那么您需要执行以下操作:

  • ar+模式打开文件

  • 当一个进程想要写入时,它必须:

    • 等待文件的独占锁

    • 寻找文件的末尾

    • 写输出

    • 刷新输出

    • 释放锁

但是文件锁定的细节超出了这个问题的范围。


查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信