根据官方doc,您可以通过适用于Python的Google API客户端库进行批量请求。这里有一个例子
from apiclient.http import BatchHttpRequest
def list_animals(request_id, response, exception):
if exception is not None:
# Do something with the exception
pass
else:
# Do something with the response
pass
def list_farmers(request_id, response):
"""Do something with the farmers list response."""
pass
service = build('farm', 'v2')
batch = service.new_batch_http_request()
batch.add(service.animals().list(), callback=list_animals)
batch.add(service.farmers().list(), callback=list_farmers)
batch.execute(http=http)
有没有办法在回调中访问请求。例如,如果有异常,则打印请求(而不是request_id)?
答案 0 :(得分:0)
我遇到了同样的问题,因为我需要使用compute.instances().aggregatedList_next()
函数的原始请求。
我最终将一个唯一的request_id
传递给batch.add()
,并创建了一个字典来跟踪所做的原始请求。然后在回调中,我引用了该字典并使用唯一的request_id
拉出了请求。
所以我做了以下事情:
requests = {}
project = 'example-project'
batch = service.new_batch_http_request(callback=callback_callable)
new_request = compute.instances().aggregatedList(project=project)
requests[project] = new_request
batch.add(new_request, request_id=project)
在可调用函数中:
def callback_callable(self, request_id, response, exception):
original_request = requests[request_id]
请注意,传递给request_id的值必须是字符串。如果传递了一个int,它将引发一个TypeError quote_from_bytes()期望的字节。
希望这有助于某人!