使用Django DefaultStorage打开的文件是否需要调用close()方法?
问题解答
- 是需要主动关闭的,逻辑和Python原生文件对象完全一致,长期不关闭会造成文件句柄泄漏,高并发场景下可能耗尽系统的文件句柄资源,导致后续文件操作失败。
- 最佳操作方式和原生
open()保持一致,直接使用with上下文管理器即可,退出上下文块时会自动完成关闭操作,示例代码如下:
- 最佳操作方式和原生
from django.core.files.storage import default_storage with default_storage.open("dir/file.txt", mode="rb") as file: data = file.read()
如果不想用上下文管理器,也可以在文件操作完成后手动调用返回文件实例的close()方法:
file = default_storage.open("dir/file.txt", mode="rb") data = file.read() file.close()
- 不存在不需要关闭的情况。你之前没有找到
close()方法是因为查找对象错误:close()是default_storage.open()返回的文件实例的方法,不是DefaultStorage类本身的方法,因此你在Storage类的官方文档和源码中找不到对应定义是正常的。
- 不存在不需要关闭的情况。你之前没有找到
内容的提问来源于stack exchange,提问作者Phil Gyford
相关产品推荐
相关产品推荐

