You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:42:22