我正在使用BatchHttpRequest(https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch)从多个Http请求中收集结果:
for user in all_users_in_domain:
gmail_service = build_gmail_service_for_user(user.google_user_id)
batch.add(gmail_service.service.users().messages().list(userId='me', q=search_query), callback=get_email_list, request_id=user_id)
batch.execute()
然后我想在回调函数get_email_list
中使用我自己的逻辑处理这些聚合结果
def get_email_list(request_id, response, exception):
message_list += response['messages']
如何在所有回调中收集数组message_lists,以便对所有请求中返回的所有结果运行算法?
答案 0 :(得分:0)
有几种方法可以做到这一点,例如将代码包含在类中并附加到类属性(例如self.message_list)。
或者您可以将回调函数放在另一个函数中:
def some_outer_function():
some_outer_function.message_list = ''
def get_email_list(request_id, response, exception):
some_outer_function.message_list += response['messages']
for user in all_users_in_domain:
gmail_service = build_gmail_service_for_user(user.google_user_id)
batch.add(gmail_service.service.users().messages().list(userId='me', q=search_query), callback=get_email_list, request_id=user_id)
batch.execute()
请注意,您必须符合" message_list"使用外部函数名称。如果您只是参考" message_list"您将分配给" get_email_list"的本地变量。
您也可以使用全局模块变量,但我并不是它的忠实粉丝。类方法将是我最喜欢的选项。