gpt4 book ai didi

ajax - 文件 uploader 的 Ajax 实现中的内存泄漏(Heroku 上的 Django)

转载 作者:行者123 更新时间:2023-12-05 00:38:49 33 4
gpt4 key购买 nike

我已经为 Django 创建了一个 ajax 文件上传器,但是每个上传的文件占用一个 一 block 内存(30-80 mb),似乎并没有放手。

我们在 Heroku 上,它为每个测功机分配 512mb 的内存,所以我很快就开始遇到内存过剩的错误。

这是处理请求的 Django View 代码:

if request.is_ajax():
# the file is stored raw in the request
upload = request
is_raw = True
try:
filename = request.GET[ 'add_image' ]
except KeyError:
return HttpResponseBadRequest( "AJAX request not valid" )
(fileBaseName, fileExtension)=os.path.splitext(filename)

uniquename = biz_id + "__" + get_a_uuid() + fileExtension
saved = save_upload(upload, uniquename, biz)

这是 save_upload 代码:
try:
#BusinessImage is my Django model. It uses django-imagekit to processs
#the raw uploaded image into three sizes (plus the original)
bi = BusinessImage(name=uploaded.GET.get("name"), business=biz)
if not BusinessImage.objects.filter(business=biz).exists():
bi.primary_image = True
bi.original_image.save(filename,ContentFile(uploaded.read()))
except IOError:
# could not open the file most likely
return False
finally:
uploaded.close()
return True

此代码改编自 this post (感谢 Alex Kuhl 和 Thunder Rabbit)。

我认为内存问题可能与 django-imagekit 有关,或者我可能没有正确关闭文件,但我不确定。我真的很感激任何帮助。

谢谢!

黏土

最佳答案

Django 上传处理程序通常不用于处理和转换文件,它们是为了让它们准备好传递给 request.FILES 数组中的 View (通过保存到/tmp 或保存到内存)。

尝试使用 [nginx upload module][1] (并上传进度)如果您想要一种简单、快速且低内存的方式来获取进度反馈。它将上传文件复制到磁盘上的指定位置,并在 POST vars 中使用文件路径、大小和 mime 类型将请求传递到 View 。比使用 django 更有效。

关于ajax - 文件 uploader 的 Ajax 实现中的内存泄漏(Heroku 上的 Django),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743734/

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