尝试BatchHttpRequest到Google Drive API时出现许多内部错误(HTPP 500)

时间:2014-03-18 17:48:19

标签: python google-api google-drive-api

我正在尝试编写一个程序,该程序将连接到我们的Google应用程序域并更改特定用户拥有的所有文件的所有权。我的代码在某种程度上有效,但是当我尝试发送带有所有插入权限请求的批量http请求时,其中很大一部分会返回以下内容。

<HttpError 500 when requesting https://www.googleapis.com/drive/v2/files/0B6zuNvhcekkVNzZ0M3RFdTA1MXc/permissions/18218617888593763709 returned "Internal Error">

编写代码来重试失败的文件是微不足道的,但我想知道为什么会发生这种情况,无论如何我都可以阻止这种行为,从而提高程序的速度。

以下是我更改权限的代码。我确实知道每批操作的请求数量最多,但在我们的开发环境中,我控制的是谷歌驱动器帐户中的文件数量,所以我不在这个数字附近。

def insertNewOwnerPermissions(self, files, new_owner):
    """Insert a new owner into the file

    Args:
        files: list of files that we want to process 
        new_owner: new owner's email address
    """

    new_permission = {
        'value': new_owner,
        'type': 'user',
        'role': 'owner'
    }

    #Add all permission requests to batch
    for file in files:
        self.batch.add(self.driveService.permissions().insert(fileId=str(file['id']), body=new_permission), callback=self.insertCallback, request_id=str(file['id']))

    #Send the batch request
    self.batch.execute(http=self.http)



def insertCallback(self, request_id, response, exception):
    print "id:"+str(request_id)
    print "response:"+str(response)
    print "exception:"+str(exception)

1 个答案:

答案 0 :(得分:0)

这可能是速率限制问题。当您发送批处理时,它会到达前端服务器,它会解压缩批处理,然后在驱动器上触发项目。然后,驱动器可以以更新速率进行barf。如果我之前遇到过这种情况,我会获得403速率限制,而不是500,但驱动程序SDK错误是众所周知的不一致。

我最终放弃批量请求并恢复到单独定时请求。事实证明,这比上传批次然后跟进大量重试要有效得多。