我最近在 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。