如何分块迭代列表调用API,按每分钟100次的频率限制执行?
按批次调用限频API的实现方案
核心思路
将数据列表按每100个元素为一个批次拆分,循环处理每个批次;每完成一个批次的API调用后(除最后一批外),暂停60秒再处理下一批,既满足接口的调用频率限制,也不会遗漏任何元素。
实现代码
基于你的原有逻辑,修改后的分批次处理代码如下:
import requests import time list_of_data = [你的数据列表] # 替换为实际的227个元素的列表 batch_size = 100 total_items = len(list_of_data) # 按步长100遍历批次起始索引 for start_idx in range(0, total_items, batch_size): # 截取当前批次的元素,最后一批自动适配剩余数量 current_batch = list_of_data[start_idx:start_idx + batch_size] # 处理当前批次内的每个元素 for data in current_batch: # 以下是你的原有API调用逻辑 url = 'https://api.com/endpoint' params = { 'param_1': data['key1'], 'param2': data['key2'], # ... 补充其他所需参数 } headers = {你的请求头配置} # 替换为实际headers response = requests.get(url=url, params=params, headers=headers) json_data = response.json() # <在这里处理返回的json_data> # 若不是最后一个批次,暂停60秒 if start_idx + batch_size < total_items: time.sleep(60)
逻辑说明
- 用
range(0, total_items, batch_size)生成每个批次的起始位置,比如0、100、200,对应三组数据:前100个、中间100个、最后27个 - Python的列表切片会自动处理超出长度的情况,因此最后一批次只会截取剩余的元素,无需额外判断
- 仅在还有下一批数据需要处理时才执行
time.sleep(60),避免最后一批处理完后不必要的等待
内容的提问来源于stack exchange,提问作者Alan Mott
相关产品推荐
相关产品推荐

