gpt4 book ai didi

django - 使用 Django 的默认存储时,您应该/可以关闭()打开的文件吗?

转载 作者:行者123 更新时间:2023-12-04 13:06:35 27 4
gpt4 key购买 nike

当使用 Django 的 DefaultStorage 时,可以打开和读取这样的文件:

from django.core.files.storage import default_storage

file = default_storage.open("dir/file.txt", mode="rb")
data = file.read()

当使用 python 自带的 open() 方法时,最好是 close() 文件之后,或者使用 with open("dir/file. txt") 作为文件: 构造。

但阅读the docs for Django's Storage classes , 并浏览 the source , 我没有看到 close() 等价物。

所以我的问题是:

  1. 是否应关闭使用 Django 的默认存储打开的文件?
  2. 如果是,怎么做?
  3. 如果不需要,为什么没有必要?

最佳答案

您没有看到关闭方法,因为您正在查看 Storage 类。 Storage 类的open 方法返回django.core.files.base.File [Source code] 的实例。它基本上包装了python文件对象,还有一个关闭文件的close方法(read等方法继承自FileProxyMixin ).

通常当您打开一个文件时,您应该关闭它,这与 Django 相同,documentation 中也强调了这一点。 :

Closing files is especially important when accessing file fields in aloop over a large number of objects. If files are not manually closedafter accessing them, the risk of running out of file descriptors mayarise. This may lead to the following error:

OSError: [Errno 24] Too many open files

但是在少数情况下您不应该关闭文件,这主要是在您将文件传递给某个将读取它的函数/方法/对象时,例如,如果您创建一个 FileResponse object你不应该关闭文件,因为 Django 会自己关闭它:

The file will be closed automatically, so don’t open it with a contextmanager.

要完成您的示例代码,您将关闭文件:

from django.core.files.storage import default_storage

file = default_storage.open("dir/file.txt", mode="rb")
data = file.read()
file.close()

关于django - 使用 Django 的默认存储时,您应该/可以关闭()打开的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69180512/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com