Я работаю над простым приложением, которое принимает изображения, оптимизирует их и сохраняет в облачном хранилище. Я нашел пример, который берет файл и использует PIL для его оптимизации. Код выглядит следующим образом:GAE - Загрузите оптимизированное изображение в облачное хранилище
def inPlaceOptimizeImage(photo_blob):
blob_key = photo_blob.key()
new_blob_key = None
img = Image.open(photo_blob.open())
output = StringIO.StringIO()
img.save(output,img.format, optimized=True,quality=90)
opt_img = output.getvalue()
output.close()
# Create the file
file_name = files.blobstore.create(mime_type=photo_blob.content_type)
# Open the file and write to it
with files.open(file_name, 'a') as f:
f.write(opt_img)
# Finalize the file. Do this before attempting to read it.
files.finalize(file_name)
# Get the file's blob key
return files.blobstore.get_blob_key(file_name)
Это прекрасно работает на местном уровне (хотя я не знаю, насколько хорошо она оптимизируется, потому что, когда я бег загруженного изображения через что-то вроде http://www.jpegmini.com/ он получает снижается 2.4x до сих пор). Однако, когда я развернуть приложение и попытайтесь загрузить изображения, которые я часто получаю 500 ошибок и эти сообщения в журналах:
F 00:30:33.322 Exceeded soft private memory limit of 128 MB with 156 MB after servicing 7 requests total
W 00:30:33.322 While handling this request, the process that handled this request was found to be using too much memory and was terminated. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you may have a memory leak in your application.
У меня есть два вопроса:
- Это даже лучший способ оптимизировать и сохранить изображения в облачном хранилище?
- Как предотвратить появление этих 500 ошибок?
Заранее спасибо.
Спасибо! Сейчас я работаю над тем, чтобы разбить приложение на модули, и я проверю это. – 2748