我最近遇到了一個問題,我的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