Google api Google Calendar API返回单个批处理请求中超出403速率限制

Google api Google Calendar API返回单个批处理请求中超出403速率限制,google-api,google-calendar-api,batch-processing,Google Api,Google Calendar Api,Batch Processing,我的应用程序代表用户创建和删除谷歌日历事件。每个用户通过OAuth门户进行授权,该用户的访问令牌用于访问API,而不是服务帐户 我遇到了各种速率限制错误的问题,所以我开始批处理请求。但是,尽管批处理请求,批处理中的许多请求都失败了。只有我在本地测试——服务上没有其他用户 例如,您可以在下面看到批处理请求中的几个deletes失败(数字2、6、7、8等)。在前几分钟内,只有这一批请求发出了十几个delete请求,而在前一个小时内可能有6个批请求(许多批请求都有相同的问题) 如果我随后立即启动另一个

我的应用程序代表用户创建和删除谷歌日历事件。每个用户通过OAuth门户进行授权,该用户的
访问令牌
用于访问API,而不是服务帐户

我遇到了各种速率限制错误的问题,所以我开始批处理请求。但是,尽管批处理请求,批处理中的许多请求都失败了。只有我在本地测试——服务上没有其他用户

例如,您可以在下面看到批处理请求中的几个
delete
s失败(数字2、6、7、8等)。在前几分钟内,只有这一批请求发出了十几个
delete
请求,而在前一个小时内可能有6个批请求(许多批请求都有相同的问题)

如果我随后立即启动另一个批处理请求,我将看到相同的模式:几个子请求成功,其他子请求失败。这让我相信我没有超过任何基于全局/日的限制,而是批处理请求本身有一些问题

[2020-08-03 13:55:03,101: WARNING/ForkPoolWorker-1] Error with batch delete request "1": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,102: WARNING/ForkPoolWorker-1] Error with batch delete request "3": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,102: WARNING/ForkPoolWorker-1] Error with batch delete request "4": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "5": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "6": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "9": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
[2020-08-03 13:55:03,103: WARNING/ForkPoolWorker-1] Error with batch delete request "10": <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/X.com_X%40group.calendar.google.com/events/X? returned "Rate Limit Exceeded">
以及回调:

def batch_delete_callback(request_id, response, exception):
    if exception is not None:
        print('Error with batch delete request "{0}": {1}'.format(
            request_id, exception))
我在这里做错了什么?我如何才能最好地处理或避免谷歌的这些403

更新

我只是试着对它进行最低限度的测试,以获得即时的失败案例。我运行了一个批处理请求,将12个事件添加到我的日历中,然后在大约15秒后运行了一个批处理请求,试图删除相同的12个事件。因此,只有两个批处理请求,每个批处理请求中有12个子请求。这是在我上次尝试后20个小时没有任何行动之后

在12个
delete
请求中,有8个请求失败。因此,我让12个
create
请求成功,然后8/12个
delete
请求返回了超出
403速率限制的

正如我在下面的评论中所指出的,我的控制台显示了每个用户每天1000000次查询和每100秒10000000次查询的配额。所以我不知道我达到了什么限制。

批处理减少了请求的总数,但速率限制仍然适用
  • 实际上,在批处理时,代码执行得更快,更可能遇到速率限制问题
  • 您需要降低代码执行速度,或者在开发人员控制台中请求增加配额
为避免超出
403费率限制
错误,建议在中执行以下步骤:

建议的行动:

  • 提高开发人员控制台项目中的每用户配额
  • 如果一个用户代表一个G套房域的许多用户提出了很多请求,考虑一个带有权限委托的服务帐户(设置QuoTuAube参数)。
  • 使用指数退避

谢谢你的回复!不幸的是,我不知道我达到了什么利率限制。现在我在控制台中看到,我限制每个用户每天查询1000000次,每100秒查询10000000次。但是,即使我做了两个批处理请求,每个请求中都有十几个请求,也会出现这些错误。顺序词:不要远远接近这些速率限制!我想我可以成倍地回退每个请求,但这意味着我根本不能使用批处理请求,因为我看不到在批处理请求中回退子请求的方法。但是,对我来说,这似乎很奇怪,在几分钟的时间里,我就完成了几十个请求……我只是用一个更简单的测试更新了底部的原始帖子。再次感谢您的关注。您是否测试了在没有批处理请求的情况下使用指数回退是否可以避免错误?您正在使用服务帐户吗?您是只执行删除请求还是同时执行其他请求?可能需要一段时间才能重置配额。如果没有任何帮助-作为GSuite客户,您可以联系并尝试找出您达到的确切配额。@AndyBromberg与您有完全相同的问题。你有进一步的进展吗?
def batch_delete_callback(request_id, response, exception):
    if exception is not None:
        print('Error with batch delete request "{0}": {1}'.format(
            request_id, exception))