我使用Google App Engine blobstore來保存一組用戶數據 - 從幾百字節到幾百KB的大小。 blob_info作爲數據存儲實體上的屬性保存。Google App Engine blobstore錯誤:BlobNotFoundError
偶爾在生產中,blobstore的讀取操作將失敗,並顯示BlobNotFoundError('',)。這個例外沒有提供任何細節,我不知道爲什麼發生故障。
根據谷歌的文檔:
「如果斑點確實不是指實際的Blobstore值,則fetch_data提出了BlobNotFoundError。」 https://developers.google.com/appengine/docs/python/blobstore/functions#fetch_data
「fetch_data()函數找不到與給定的BlobInfo或BlobKey值相對應的Blobstore值。」 https://developers.google.com/appengine/docs/python/blobstore/exceptions#BlobNotFoundError
最令人費解的是,這些故障是間歇性的。
下面是我讀取/寫入blobstore的代碼。只有在blob_info(從數據存儲讀取)不是None時才嘗試讀取。
有什麼建議嗎?
def read(blob_info):
blob_reader = blobstore.BlobReader(blob_info.key(), buffer_size=358400)
try:
data = blob_reader.read()
finally:
blob_reader.close()
return data
def write(data, mime_type):
file_name = files.blobstore.create(mime_type=mime_type)
with files.open(file_name, 'a') as f:
f.write(data)
files.finalize(file_name)
blob_key = files.blobstore.get_blob_key(file_name)
# This is a hack to handle an apparent GAE delay synchronizing the blobstore
for i in range(1,3):
if blob_key:
break
else:
time.sleep(0.05)
blob_key = files.blobstore.get_blob_key(file_name)
new_blob_info = blobstore.BlobInfo.get(str(blob_key))
return new_blob_info