Недавно я столкнулся с проблемой с проектом 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
Как вы можете видеть первый процесс более чем удваивается в использовании памяти! Поскольку эта функция будет использоваться часто, мне нужно выяснить, что происходит. Я считаю, что я сузил его до следующего вида (это трехэтапный процесс загрузки изображения, добавления деталей, обрезки миниатюр).
Вот вид ниже. Он получает объект фотографии, загружает изображение из файла, получает полевые координаты, которые пользователь отправил, а затем создает изображение размером 200 200 пикселей. Это вновь созданное изображение записывается обратно на диск с миниатюрным именем в файле и сохраняется фотообъект.
@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 МБ на изображение.
Сузились ли вы, какая операция в представлении приводит к увеличению использования памяти? Что произойдет, если просмотр вызывает несколько раз? –
Нет У меня нет, так как я не могу делать столько отладки на реальном сервере (например, pdb). Кажется, что это не происходит каждый раз при вызове вида, но чаще всего. (После того как я загрузил несколько изображений за несколько недель, использование памяти превысило 112 мб на один процесс). – Fernker
Не могли бы вы изменить свой вопрос с типичным размером и форматом изображения? –