批量请求到Google API在批量执行Python之前进行调用?

时间:2014-06-30 18:01:53

标签: api google-api batch-processing google-admin-sdk

我正在努力通过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的请求数量增加了一倍,并且我在运行的规模上有真正的配额问题。

0 个答案:

没有答案