Неполадка в App Engine при записи файлов непосредственно в blobstore - PullRequest
3 голосов
/ 01 июля 2011

Я использую App Engine с Python.Чтобы хранить изображения моих пользователей, я записываю их непосредственно в blobstore, как указано в Документация Google .

Мой код указан ниже:

# Image insertion in the blobstore
file_name = files.blobstore.create(mime_type='image/jpeg')
with files.open(file_name, 'a') as f:
    f.write(self.imageContent)
files.finalize(file_name)
self.blobKey = files.blobstore.get_blob_key(file_name)
logging.info("Blobkey: "+str(self.blobKey))

проблема ошибочнаяЯ ничего не меняю, и со вчерашнего дня иногда это работает, иногда это не работает.Зачем?Когда я печатаю блоб-ключ (последняя строка моего кода), я вижу, было ли изображение сохранено в буфере или нет.

Когда это работает, у меня отображается следующая строка:

Blobkey: AMIfv94p1cFdqkZa3AhZUF2Tf76szVEwpGgwOpN...

Когда это не работает, у меня есть это в моих журналах:

Blobkey: None

Последнеедеталь: изображения (self.imageContent) предварительно обрабатываются и преобразуются в .JPEG перед каждой записью.

РЕДАКТИРОВАТЬ: Каждый раз изображения хранятся в blobtore (я вижу их в blobviewer в консоли администрирования).Так что это функция get_blob_key, которая работает неправильно ...

Я хотел бы знать, что мне делать в такой ситуации?Я делаю что-то не так, что делает поведение App Engine странным.Как я могу решить это?

1 Ответ

3 голосов
/ 01 июля 2011

Мне наконец-то удалось решить эту проблему, заставив поток спать в интервалах 50 мс

Это код, который я добавил:

# Sometimes blobKey is None
self.blobKey = files.blobstore.get_blob_key(file_name)

# We have to make it wait til it works!
for i in range(1,3):
    if(self.blobKey):
         break
    else:
        logging.info("blobKey is still None")
        time.sleep(0.05)
        self.blobKey = files.blobstore.get_blob_key(file_name)

logging.info("Blobkey: "+str(self.blobKey))

Конечно, вы должны импортировать времямодуль, чтобы заставить его работать.

import time

Я в значительной степени сделал то же самое, что и человек в выпуске 4872, который упомянул systemmptotoout.

Спасибо.Пожалуйста, не стесняйтесь добавлять любые предложения.

...