Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 谷歌应用引擎blobstore错误:BlobNotFoundError_Python_Google App Engine_Blobstore - Fatal编程技术网

Python 谷歌应用引擎blobstore错误:BlobNotFoundError

Python 谷歌应用引擎blobstore错误:BlobNotFoundError,python,google-app-engine,blobstore,Python,Google App Engine,Blobstore,我使用Google应用程序引擎blobstore来保存一个用户数据块——大小从几百字节到几百KB不等。blob_信息保存为数据存储实体上的属性 有时在生产环境中,从blobstore读取会失败,并出现BlobNotFoundError(“”,)。异常没有提供任何细节,我也不知道为什么会发生故障 根据谷歌的文档: 如果blob未引用实际的Blobstore值,则fetch_数据将引发BlobNotFoundError “fetch_data()函数找不到与给定BlobInfo或BlobKey值对

我使用Google应用程序引擎blobstore来保存一个用户数据块——大小从几百字节到几百KB不等。blob_信息保存为数据存储实体上的属性

有时在生产环境中,从blobstore读取会失败,并出现BlobNotFoundError(“”,)。异常没有提供任何细节,我也不知道为什么会发生故障

根据谷歌的文档:

如果blob未引用实际的Blobstore值,则fetch_数据将引发BlobNotFoundError

“fetch_data()函数找不到与给定BlobInfo或BlobKey值对应的Blobstore值。”

最令人费解的是,故障是间歇性的

下面是我从blobstore读取/写入blobstore的代码。只有当blob_信息(从数据存储中读取)不是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

我认为你对GAE延迟的破解已经运行了三次,但都没有成功,给了blob_key值
None
。排队

new\u blob\u info=blobstore.BlobInfo.get(str(blob\u键))

str(blob_键)
将转换为“None”,即包含单词None的字符串。因此,您返回一个带有键的blob_信息,它只包含单词“None”

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

正确的解决办法是以某种方式避免比赛条件,但我不知道为什么会发生这种情况;我觉得你的代码很正常。我在Java上做了大致相同的工作,在那里它似乎工作得很好。请记住,blobstore文件支持是实验性的,并没有很好的文档记录。您是否可以重新编写代码以使用原始blobstore API(即带有上载URL)