Недавно я столкнулся с проблемой с моим проектом 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. Это вновь созданное изображение записывается обратно на диск с .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 МБ на изображение.