如何在GET请求返回完成状态为0时正确实现等待逻辑
如何实现API轮询等待任务完成的逻辑?
你可以通过循环轮询+固定间隔等待的方式实现这个需求,同时建议加上重试次数限制,避免无限等待。以下是修改后的完整代码:
import requests import time url = "https://xxx" headers = {"Content-Type": "application/json", "Ocp-Apim-Subscription-Key": "xxx"} body = {...} # Step 1: 提交任务获取结果URL response = requests.post(url, headers=headers, json=body) response.raise_for_status() # 处理POST请求失败的情况 url_result = response.headers['url-result'] # Step 2: 轮询等待任务完成 max_retries = 30 # 可根据任务预期耗时调整最大重试次数 retry_interval = 1 # 每次等待1秒 retry_count = 0 task_completed = False while retry_count < max_retries and not task_completed: # 发送GET请求查询状态 status_response = requests.get(url_result, headers=headers) status_response.raise_for_status() status_data = status_response.json() task_completed = (status_data['completed'] == 1) if task_completed: # 任务完成,执行后续处理逻辑 print("任务已完成,结果数据:", status_data) # ... 这里写你的结果处理代码 ... else: # 任务未完成,等待后重试 time.sleep(retry_interval) retry_count += 1 # 可选:打印重试日志 # print(f"任务未完成,第{retry_count}次重试...") # 处理超时场景 if not task_completed: print(f"任务超时:已重试{max_retries}次仍未完成")
关键说明:
- 引入
time.sleep(retry_interval)实现等待1秒的逻辑 - 设置
max_retries限制重试次数,防止程序无限挂起 - 用
response.raise_for_status()捕获请求异常(比如网络错误、API返回5xx/4xx状态码) - 每次循环重新获取最新状态,直到任务完成或达到重试上限
内容的提问来源于stack exchange,提问作者Fluxy
相关产品推荐
相关产品推荐

