首页 > 解决方案 > 了解python关闭方法

问题描述

是否正确理解以下两个功能完全相同?不管它们是如何被调用的。

def test():
    file = open("testfile.txt", "w")
    file.write("Hello World")

def test_2():
    with open("testfile.txt", "w") as f:
        f.write("Hello World")

因为当一个对象不再被引用时,python 会调用 close 方法。

如果不是,那么这句话让我感到困惑:

当一个文件的引用对象被重新分配给另一个文件时,Python 会自动关闭一个文件。使用 close() 方法关闭文件是一个好习惯。

来自https://www.tutorialspoint.com/python/file_close.htm

标签: python

解决方案


不,该close方法将在第一种情况下由 python 垃圾收集器(终结器)机器调用,在第二种情况下立即调用。如果您循环调用您的testtest_2函数数千次,观察到的行为可能会有所不同。

文件描述符(至少在 Linux 上)是一种宝贵而稀缺的资源(当它耗尽时,open(2)系统调用会失败)。在 Linux 上,使用getrlimit(2) 来查询进程RLIMIT_NOFILE的文件描述符数量限制。您应该更喜欢在文件句柄无用时快速调用close(2)系统调用。

您的问题是特定于实现的、特定于操作系统的和特定于计算机的。您可能想通过阅读操作系统:三个简单的部分来了解有关操作系统的更多信息。

在 Linux 上,也可以在终端中尝试cat /proc/$$/limitsor命令。cat /proc/self/limits您会看到以Max open files(在我的 Debian 台式计算机上,现在是 2019 年 12 月,软限制为 1024)开头的一行。请参阅proc(5)


推荐阅读