我正在使用App Engine和Python。为了存储我的用户的图像,我将它们直接写入blobstore,如Google documentation所示。
我的代码如下:
# 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(我的代码的最后一行)时,我可以看到图像是否已保存到blobstore中。
当它工作时,我显示以下行:
Blobkey: AMIfv94p1cFdqkZa3AhZUF2Tf76szVEwpGgwOpN...
当它不起作用时,我在我的日志中有这个:
Blobkey: None
最后的细节:图像(self.imageContent)被预处理并在每次写入之前转换为.JPEG。
修改
每次,图像都存储在blobstore中(我可以在管理控制台的blobviewer中看到它们)。这就是get_blob_key函数出现故障...
我想知道在这种情况下我该怎么办?我做错了什么让App Engine的行为变得不稳定。我该如何解决这个问题?
答案 0 :(得分:3)
我终于设法通过在50ms的间隔期间使线程休眠来解决这个问题
这是我添加的代码:
# 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期系统中提到的人一样。
感谢。请随意添加任何建议。