调用Azure云REST API出现upstream request timeout问题求助
问题与解决方案
问题详情
调用部署在Azure云平台的REST API时,反复出现「upstream request timeout」错误。使用的Iris数据集约30万行,尝试减少数据量后问题仍未解决。运行以下代码,预期实现数据上传并输出{},但未达成预期:
import requests import time import json with open("Iris.csv") as f: line = f.readline() headers = line.strip().split(",") features = [] for l in f.readlines(): features.append(list(map(lambda x: float(x), l.strip().split(",")[1:-1]))) models = ["onnx","pmml","pfa"] for _ in range(600): data1 = requests.post("https://axscdfd/score", json={ "models": models, "x": features, }, headers={"Authorization": "Bearer abcdefght"}, timeout=(100,100)) print(data1.content) time.sleep(2)
解决建议
1. 拆分请求数据,分批发送
当前代码一次性将30万行特征全部塞进单请求,哪怕减少数据量,单次请求体积仍可能超出后端处理能力。改成分批发送,降低单请求负载:
import requests import time import json # 读取数据集 with open("Iris.csv") as f: line = f.readline() headers = line.strip().split(",") features = [] for l in f.readlines(): features.append(list(map(lambda x: float(x), l.strip().split(",")[1:-1]))) models = ["onnx","pmml","pfa"] # 分批处理,每批1000条(可根据后端性能调整) batch_size = 1000 total_batches = len(features) // batch_size + (1 if len(features) % batch_size != 0 else 0) for batch_idx in range(total_batches): start = batch_idx * batch_size end = start + batch_size batch_features = features[start:end] try: response = requests.post( "https://axscdfd/score", json={"models": models, "x": batch_features}, headers={"Authorization": "Bearer abcdefght"}, timeout=(120, 120) # 适当延长超时时间 ) print(f"批次 {batch_idx+1}/{total_batches} 响应: {response.content}") # 捕获HTTP错误状态码 if response.status_code >= 400: print(f"批次 {batch_idx+1} 错误: {response.text}") except requests.exceptions.Timeout: print(f"批次 {batch_idx+1} 超时,需检查后端处理能力或调整批次大小") time.sleep(2)
2. 调整Azure API端点的超时配置
- Azure ML实时端点: 在Azure门户的端点配置中,找到
request_timeout参数,默认是30秒,可调整至120秒(需匹配代码中的超时设置) - Azure App Service托管API: 在App Service的「配置-常规设置」中,修改「请求超时」(最大支持230秒),确保超过单批请求的处理时间
3. 优化后端资源与推理效率
- 检查后端实例的CPU/内存配置,若资源不足,升级实例规格(比如从B1升级到B2)
- 若使用模型推理,开启GPU加速(如果后端部署了GPU实例),或优化模型的批量推理逻辑,提升处理速度
4. 排查请求频率与限制
- 查看Azure门户的API监控日志,确认是否触发了速率限制或并发请求限制
- 若循环请求频率过高,延长
time.sleep的间隔(比如从2秒改为5秒),或联系Azure支持提高限制额度
5. 验证请求合法性
- 确认Bearer令牌未过期、权限正确
- 检查请求的JSON格式是否符合API要求(比如特征维度、数据类型是否与模型输入匹配)
内容的提问来源于stack exchange,提问作者deepthi
相关产品推荐
相关产品推荐

