Cla*_*ell 4 python memory django file-io file-upload
我正在使用Django读取ajax上传的文件以将其存储在模型中.上传请求包含原始上传的图像数据.
def my_view(request):
upload = request
model_instance.image_field.save(uniquename, ContentFile(upload.read()))
Run Code Online (Sandbox Code Playgroud)
如果重要,我使用AmazonS3作为上传文件的存储后端.
在包含此代码的函数中的某处,我有内存泄漏.
upload.close()这样做之后我需要打电话来释放资源/记忆吗?
或者我的记忆问题来自其他问题,在这个功能的其他地方?
Mar*_*ers 15
python垃圾收集器将在不再引用文件时关闭它们.
如果您的upload变量是函数中的局部变量,则在函数返回时将清除它.因此,upload在正常的垃圾收集循环期间,所引用的文件将自动关闭.
也就是说,关闭文件可能更好.您可以将该文件用作上下文管理器,并在退出上下文时自动关闭:
with open('yourfilepath.ext') as upload:
model_instance.image_field.save(uniquename, ContentFile(upload.read()))
Run Code Online (Sandbox Code Playgroud)
如果upload是Django为您生成的东西,打开并准备就绪,您仍然可以使用contextlib.closing装饰器自动关闭它:
import contextlib
with contextlib.closing(upload):
model_instance.image_field.save(uniquename, ContentFile(upload.read()))
Run Code Online (Sandbox Code Playgroud)
要回答你的其余问题:你的泄密最有可能发生在其他地方.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |