下文我们以python举例。
【资料图】
在使用 Python开发的时候,经常使用上下文管理器来打开文件。Python 上下文管理器可以轻松关闭文件:
with open("hello.txt", mode="w") as file: file.write("Hello, World!")
示例中,只要上下文处于活动状态,上下文管理器就会打开文件hello.txt并管理文件资源。通常,缩进块中的所有代码都取决于打开的文件对象。一旦缩进块结束或引发异常,文件将关闭。
如果您没有使用上下文管理器或者您使用不同的语言工作,那么您可以使用try...finally方法显式关闭文件:
try: file = open("hello.txt", mode="w") file.write("Hello, World!")finally: 电脑 file.close()
关闭文件的块finally无条件运行,无论该try块成功还是失败。虽然这种语法有效地关闭了文件,但 Python 上下文管理器提供了更简洁和更直观的语法。
但您有没有想过,为什么在 Python 中关闭文件很重要?
答案是:文件是受操作系统限制的资源
Python 将文件操作委托给操作系统。操作系统是进程(如 Python)和所有系统资源(如硬盘驱动器、RAM 和 CPU 时间)之间的中介。
当您打开文件时open(),您会对操作系统进行系统调用,以便在硬盘驱动器上找到该文件并为读取或写入做好准备。然后,操作系统将返回一个无符号整数,在 Windows 上称为文件句柄,在类 UNIX 系统(包括 Linux 和 macOS)上返回一个文件描述符:
一个 Python 进程进行系统调用并获取整数 10 作为文件句柄
获得与文件关联的编号后,您就可以进行读取或写入操作了。每当 Python 想要读取、写入或关闭文件时,它都会进行另一个系统调用,提供文件句柄号。Python 文件对象有一个.fileno()方法可以用来查找文件句柄电脑:
with open("test_file.txt", mode="w") as file: file.fileno()
fileno()方法将返回操作系统使用的整数作为文件描述符。
操作系统对于任何单个进程可以拥有的打开文件的数量都有限制。这个数字通常是数千。操作系统设置此限制是因为如果一个进程试图打开数千个文件描述符,则该进程可能有问题,而且保持文件打开会使您容易丢失数据。
采用上下文管理器管理您的文件是一种防御性技术,建议使用。
限制是由操作系统而不是 Python 强制执行的。但是,理论上操作系统可以处理更多的文件描述符,但实际上您会遇到的操作系统的限制。
OSError: [Errno 24] Too many open files: "xxx.txt"
但是根据操作系统的不同,有方法可以提高每个进程的文件数限制。但是,您应该问问自己是否真的需要这么做。
例如在进行服务器与大量的客户端进行通讯时,就可能提高文件句柄数。
为什么操作系统会限制文件句柄?
从操作系统的角度来看,这个限制相对保守,任何达到限制的进程都可能会泄漏文件句柄以及其他资源。
对于大多数应用程序来说,打开太多的文件句柄是没有意义的。如果只是处理文件,反而会降低程序效率。
如果不关闭文件和 Python 崩溃会发生什么?
import osfile = open("crash.txt", mode="w")file.write("Hello, world!")os._exit(1)
运行上面的代码片段后,您会看到操作系统创建了该文件,它也没有任何内容。
Python 默认是使用一个缓冲区来收集写操作。当缓冲区满时,或者文件被显式关闭时,缓冲区被刷新,写操作完成。
示例里os._exit()直接将python解释器退出,模拟了崩溃。导致程序异常。
所以说
如果不close,会导致进程结束丢失缓冲区数据。操作系统对打开的文件数是有限制的,打开文件大量的没关闭,造成计算机资源浪费。打开文件大量没关闭,一旦出现=异常崩溃,可能干扰操作系统清理程序,甚至造成文件锁定,别的程序无法正常访问。电脑-
全球简讯:超市口罩被防盗扣洞穿引顾客质疑,工作人员:可以拿来退货山东日照,莒县网友发视频称,在当地一超市买口罩时发现很多...
-
世界杯决赛门票已炒到近10万元,超5万名阿根廷球迷涌入卡塔尔据央视财经消息,卡塔尔世界杯决赛在即,大批阿根廷球迷从国...
-
环球精选!工信部:1-10月全国晶硅电池产量超过230GW(吉瓦)据工信部网站12月15日披露,2022年1-10月,我国光伏产业运行...
-
世界微头条丨消息称特斯拉最快下周宣布在墨西哥建厂据报道,多位知情人士今日称,特斯拉最快将于下周宣布在墨西...
-
以岭药业称多方面证实连花清瘟有良好安全性今日,以岭药业发布声明:近日,网络谣言称连花清瘟可造成肝...
-
焦点报道:胡润中国食品行业百强榜:贵州茅台以2.4万亿的价值蝉联第一,比去年增长10%2022胡润中国食品行业百强榜12月18日发布。榜单显示,贵州茅...
-
【环球播资讯】抖音电商发布世界杯相关消费数据:梅西相关商品销量是姆巴佩的45倍数据显示,11月21日至12月15日,世界杯核心品类球迷用品较赛...
-
信息:由于阿里云崩溃,OKX出现短暂宕机OKX官方推特发文表示,目前其云提供商出现间歇性连接错误,影...
-
当前快看:女子网购N95口罩疑收虚假发货单号,平台:无法强制商家发货据巨浪视频消息,12月18日,四川成都。毛女士反映,她7日在某...
-
世界微动态丨世界杯决赛现场将播放林俊杰歌曲《心墙》据澎湃新闻,卡塔尔世界杯决赛将于明日23点开打,比赛现场将...
- 智联世界,元生无界!快手虚拟人IP亮相2022人工智能大会
2022-09-07 10:47:54
- 机器人界“奥林匹克”!2022世界机器人大会8月18日举行
2022-08-10 09:58:58
- 2025年全球人口将达到90亿!机器人将在农业领域大显身手
2022-07-14 09:41:10
- 中科院院士蒋华良:AI+分子模拟与药物研发将大有可为
2022-07-14 09:37:00
- “千垛之城荷你有约” 2022兴化市荷文化旅游节正式开幕
2022-07-07 09:28:34