1

私は 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
4

1 に答える 1