我最近遇到了一个问题,我的Django项目和WebFaction上的内存使用情况。在Django中裁剪图像导致大量内存增加
这里是webfaction在内存中运行该项目的两个过程:
30396 4-20:20:00 13486
30404 4-20:20:00 13487
视图后运行过程中的一个将大幅增加:
69720 4-20:20:22 13486
30404 4-20:20:22 13487
正如你所看到的第一个进程在内存使用中翻了一番!由于这个功能经常被使用,我需要弄清楚发生了什么。我相信我已缩小到以下视图(这是一个上传图像,添加细节,剪裁缩略图的3步过程)。
这是下面的视图。它获取一个照片对象,从文件加载图像,获取用户提交的框坐标,然后创建一个200,200大小的图像。这个新创建的图像被回写到磁盘上,文件名中包含一个.thumbnail文件,照片对象被保存。
@login_required
def upload3(request, photo_pk):
photo = get_object_or_404(Photo, pk=photo_pk, user=request.user)
if request.method == "POST":
form = upload3Form(request.POST)
if form.is_valid():
im = Image.open(photo.image.path)
try:
box =(form.cleaned_data['x1'],form.cleaned_data['y1'],form.cleaned_data['x2'],form.cleaned_data['y2'])
except:
box = ('0','0','1000','1000')
cropped = im.crop(box)
cropped.thumbnail((200,200),Image.ANTIALIAS)
result = os.path.splitext(photo.image.path)
cropped.save(result[0] + '.thumbnail' + result[1])
photo.status = 3
photo.save()
任何想法,我可能做错了将不胜感激。
Update 1
:用于测试的图像全部为Jpeg,尺寸约为3600 x 2700,每张图像大小约为2 MB。
您是否缩小了视图中的哪些操作会导致内存使用增加?如果视图被多次调用会发生什么? – 2012-02-28 00:02:31
不,我没有,因为我无法在活动服务器(如pdb)上执行尽可能多的调试。似乎并不是每次调用视图时都会发生,但大多数情况下都是如此。 (几个星期前我上传了几张图片后,一次处理的内存使用量高于112 MB)。 – Fernker 2012-02-28 00:11:05
你介意用典型的图像大小和格式更新你的问题吗? – 2012-03-05 22:32:52