我正在努力通过Admin SDK向Google API发送大批量请求,该请求会根据我们内部服务器中的组(重新调整脚本)将成员添加到特定组。我正在使用Python并访问Google API我正在使用[apiclient library] [1]。当我创建服务和批处理对象时,服务对象的创建会请求URL。
batch_count = 0
batch = BatchHttpRequest()
service = build('admin', 'directory_v1')
日志
INFO:apiclient.discovery:URL being requested:
https://www.googleapis.com/discovery/v1/apis/admin/directory_v1/rest
这有意义,因为该HTTP调用返回的JSON对象用于构建服务对象。
现在我想在批处理对象中添加多个请求,所以我这样做了;
for email in add_user_list:
if batch_count != 999:
add_body = dict()
add_body[u'email'] = email.lower()
for n in range(0, 5):
try:
batch.add(service.members().insert(groupKey=groupkey, body=add_body), callback=batch_callback)
batch_count += 1
break
except HttpError, error:
logging_message('Quota exceeded, waiting to retry...')
time.sleep((2 ** n)
continue
每次迭代最外层的for循环时,它都会记录(组地址被编辑)
INFO:apiclient.discovery:URL being requested:
https://www.googleapis.com/admin/directory/v1/groups/GROUPADDRESS/members?alt=json
在批量请求填充所有单个请求之前,批处理是否不发送对API的任何调用?为什么每次调用上面显示的API?然后当我batch.execute()
执行所有请求时(这是我认为调用API的唯一区域?)
有一秒钟我认为调用是构造.members()
返回的对象,但我尝试了这些更改:
service = build('admin', 'directory_v1').members()
batch.add(service.insert(groupKey=groupkey, body=add_body), callback=batch_callback)
并得到了相同的结果。这是一个问题的原因是因为它对API的请求数量增加了一倍,并且我在运行的规模上有真正的配额问题。