google drive API drive.files.get经常出现http 500内部错误

时间:2012-09-18 05:59:02

标签: python google-drive-api

我们的服务高度依赖于Google云端硬盘(使用来自https://developers.google.com/api-client-library/python/的Python SDK),我们的服务通过谷歌驱动器集合和文件。

检查生产日志,我们发现当我们调用google drive API drive.files.get时,有很多http 500服务器内部错误,http 500错误率约为0.5%。当我进行调查时,极端情况是使用drive.files.get API在一小时内连续9次http 500失败。

BTW:我们的服务托管在美国WEST-2数据中心的亚马逊网络服务上。

任何人都有类似的问题吗?
任何帮助表示赞赏。

异常调用堆栈如下:
__文件“/home/xxxxxx/xxxxxxx/storage.py”,第1185行,在get_file中 ___gdrive_file = self.client.files()。get(fileId ='0Bxn2GmQxR4zHYlNvaUlFNjl6MkE',fields ='id,title,modifiedDate,createdDate,fileSize,mimeType,downloadUrl,labels')。execute()
_ 文件“/usr/lib/python2.7/dist-packages/apiclient/http.py”,第389行,执行中
_
_raise HttpError(resp,content,self.uri)
__HttpError:https://www.googleapis.com/drive/v2/files/0Bxn2GmQxR4zHYlNvaUlFNjl6MkE?fields=id%2Ctitle%2CmodifiedDate%2CcreatedDate%2CfileSize%2CmimeType%2CdownloadUrl%2Clabels&alt=json返回“内部错误”>

3 个答案:

答案 0 :(得分:9)

由于Google基础架构复杂,规模大且分布式,因此几乎不可能出现0%的错误率 - 服务器或硬盘在请求期间死亡,服务器内部意外超时,数据中心停机或负载增加,暂时的DOS攻击行为不端的应用程序...... - 所有这些都可能会提高500的错误率 - 所以作为一般的良好做法,在你处理Web API时实现指数退避和重试策略是好的,实际上如果你几乎是强制性的我们希望提供可靠的服务,也可以为您解决临时网络故障等问题......

现在0.5%有点高,我相信全球错误率平均较低,但我会将其提交给云计算团队,以便他们调查并尝试减少这一点(有时候只是增加超时)到我们的服务器依赖项之一)。我们总是采用降低错误率的通行证,但有时我们不得不花时间构建新功能,尤其是当产品相当新时:)

答案 1 :(得分:7)

我看到的错误率大致相同。只需进行指数退避并重试。

答案 2 :(得分:0)

我使用https://github.com/jd/tenacity重试了请求

from tenacity import retry, retry_if_exception_type, wait_exponential, stop_after_attempt
from googleapiclient.errors import HttpError

@retry(reraise=True, retry=retry_if_exception_type(HttpError),
       wait=wait_exponential(),
       stop=stop_after_attempt(5))
def function_that_calls_the_google_drive_api():
    pass