首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google App Engine blobstore错误: BlobNotFoundError

Google App Engine blobstore错误: BlobNotFoundError
EN

Stack Overflow用户
提问于 2013-03-28 00:00:03
回答 1查看 349关注 0票数 1

我使用Google App Engine blobstore保存用户数据的blob --大小从几百字节到几百KB不等。blob_info另存为数据存储区实体上的属性。

在生产环境中,偶尔会出现从blobstore读取失败并显示BlobNotFoundError('',)的情况。异常没有提供任何细节,我也不知道为什么会发生故障。

根据谷歌的文档:

如果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

关于这一点,最令人困惑的是,失败是间歇性的。

下面是我对blobstore进行读/写的代码。仅当blob_info (从数据存储区读取)不是None时,才会尝试读取。

有什么建议吗?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2013-04-10 13:31:10

我认为你对GAE延迟的攻击是运行了三次都没有成功,这使得blob_key的值为None。在队伍中

new_blob_info = blobstore.BlobInfo.get(str(blob_key))

str(blob_key)将转换为“None”,即包含单词None的字符串。所以你返回的是一个带有键的blob_info,它只包含单词'None‘。

您可以通过在循环后检查显式的None来快速修复它。

正确的解决方法是以某种方式避免竞争条件,但我不知道为什么会发生这种情况;您的代码在我看来是正常的。我在Java上做了大致相同的操作,在那里它似乎工作得很好。请记住,blobstore文件支持是实验性的,并没有很好的文档记录。你能修改你的代码以使用原始的blobstore API (即上传URL)吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15663431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档