理解python关闭方法

Pet*_*sen 4 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")
Run Code Online (Sandbox Code Playgroud)

由于python在不再引用对象时调用close方法。

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

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

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

Bas*_*tch 11

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

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

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

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