python withopen还要close吗_使用with open(),不需要写close语句,默认自动帮我们关闭文件...

1、with基于上下文,会自动帮助我们关闭文件。

如果不关闭文件,会怎么样?对于在个人电脑上没什么影响。如果你执行的python程序结束了,文件会自动关闭。

服务器端如果不关闭文件,会出现句柄泄露,导致句柄耗尽。

2、对于linux系统,每次做一件事,就会打开一个文件,进行读,写。。。等操作,然后关掉。但是打开的文件在linux系统有一个上限,不能打开过多的文件,上限是65535个文件。

服务器端开的文件一般是不关闭的,服务器的进程不会自己结束掉的。如果打开的文件个数超过65535个,就会出现句柄耗尽,其他linux所有的文件都被卡死了。这个时候打开文件会发现操作系统没有可用的句柄了。所以不关闭文件一般对服务器端有限制。

3、文件如果没有关闭,会导致你写入的内容,没有真正写到磁盘上;

不关文件是否可以让文件的内容实时写入磁盘里面,而不是最后等到关闭文件才写入?

答案是可以的。可以使用flush()配合open()来实现。经验证,flush()之前是没有写入的,flush()之后数据写入文件了。

flush就是实时刷新,把你写入的文件内容写到磁盘里。Windows之所以会有这种机制,是因为如果每写入几个字符就要操作一次IO的话,对磁盘的压力会特别大。

而flush()之后再输入的数据就没有被写入文件中。

知识补充:

句柄当做一个人的名字,并"可以通过名字(句柄),实现对句子的引用和访问", 感觉这种比喻好象贴近,但问题是可能有许多人叫同一个名字,但句柄之所以有意义正因为它具有唯一性,所以这种比喻也有问题。

如果换个说法,说句柄是表示你的进程与外界的i/o连接,把它当作是一个连接的名字是不是更恰当些?

文件句柄是一个十六位长度的二进制代码(Windows95后为32位无符号整 数),代表一个已被打开文件的通道号,借助于这个句柄,你的应用程序即可使用这个相应的句柄对文件进行随意存取操作,说白了文件句柄其实是一串代表着特殊含义的号码;

当然其实系统是用句柄与一些资源联系起来的,当由系统管理,动态分配给你应用程序的某些资源的代号,你就可以使用句柄访问相应的资源了,尤其在Windows系统中,有很多东西都使用句柄,如窗口,socket。

句柄泄露示例,参考:https://www.cnblogs.com/wendiyou/p/11372666.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值