gpt4 book ai didi

python - 在Python中,是否可以对每个请求使用 'exponential backoff'来进行批量HTTP请求?

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:20 24 4
gpt4 key购买 nike

因此,我在这里编写了一个脚本,将学生添加到类(class)中(Google Classroom API)。

students = getStudents('Year10', '10A')  # VAR

for student in students:
newStudent = {
# Student Identifier
'userId': student
}
batch1_1.add(service.courses().students().create(courseId=arCourseId, body=newStudent))
batch1_1.add(service.courses().students().create(courseId=ciCourseId, body=newStudent))
batch1_1.add(service.courses().students().create(courseId=dtCourseId, body=newStudent))
batch1_1.add(service.courses().students().create(courseId=drCourseId, body=newStudent))
batch1_1.add(service.courses().students().create(courseId=enCourseId, body=newStudent))
batch1_2.add(service.courses().students().create(courseId=geCourseId, body=newStudent))
batch1_2.add(service.courses().students().create(courseId=hiCourseId, body=newStudent))
batch1_2.add(service.courses().students().create(courseId=icCourseId, body=newStudent))
batch1_2.add(service.courses().students().create(courseId=laCourseId, body=newStudent))
batch1_2.add(service.courses().students().create(courseId=maCourseId, body=newStudent))
batch1_3.add(service.courses().students().create(courseId=muCourseId, body=newStudent))
batch1_3.add(service.courses().students().create(courseId=peCourseId, body=newStudent))
batch1_3.add(service.courses().students().create(courseId=reCourseId, body=newStudent))
batch1_3.add(service.courses().students().create(courseId=scCourseId, body=newStudent))
batch1_1.execute()
time.sleep(1)
batch1_2.execute()
time.sleep(1)
batch1_3.execute()
time.sleep(1)

确实有效,但是,有时个别请求会返回:

“请求 https://classroom.googleapis.com/v1/courses/[COURSE ID]/students 时出现 HttpError 500?alt=json 返回“内部错误””

对于这些单独的请求,我想编写代码,以便在收到 5xx 错误时重试单独的失败请求。但我不确定如何实现这一点。

目前,即使只有 1 名学生没有参加类(class),我也必须重新运行整个脚本,这当然是一种资源浪费。

最佳答案

创建批处理时,您可以提供一个回调函数,该函数将为您添加到批处理中的每个请求调用。

回调需要三个参数:

  • request_id:您决定标识要添加到批处理中的请求的 ID(在调用批处理的 add() 方法时传递它
  • 响应:您对 API 进行的单个调用的响应
  • 异常:如果批处理的请求出现错误,则异常对象

下面有一些伪代码来解释逻辑。

# sample callback function
def my_batch_callback(request_id, response, exception):
if exception is not None:
# Do something with the exception
print(exception)
else:
# Do something with the response
print("Request is successful: {}".format(response))
pass

# creation of batch passing in the call back
batch = service.new_batch_http_request(callback=my_batch_callback)

# addition to batch with a specific id
batch.add(service.object().insert(name="test-1", request_id="id-1"))
batch.add(service.object().insert(name="test-2", request_id="id-2"))
batch.add(service.object().insert(name="test-3", request_id="id-3"))

使用回调,您可以使用其 ID 保存所有错误请求,并稍后重试。有不同的方法可以做到这一点:您可以使用一个简单的列表并在运行批处理后检查它,或者您可以创建一个专用的类并利用它提供的持久性。

我建议你也看看官方文档 here .

关于python - 在Python中,是否可以对每个请求使用 'exponential backoff'来进行批量HTTP请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47856660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com