私は Google App Engine ブロブストアを使用して、数百バイトから数百 KB のユーザー データのブロブを保持しています。blob_info は、データストア エンティティのプロパティとして保存されます。
本番環境では、ブロブストアからの読み取りが BlobNotFoundError('',) で失敗することがあります。例外は詳細を提供しておらず、エラーが発生している理由を理解できません。
Googleのドキュメントによると:
「blob が実際の 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
これについて最も困惑しているのは、障害が断続的であることです。
以下は、ブロブストアからの読み取り/書き込みのための私のコードです。読み取りは、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