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

Python中While循环持续回到代码顶部无法停止问题求助

优化Solr查询重试的Python代码

看起来你的这段重试Solr查询的代码逻辑基本有了雏形,但确实存在几个可以优化的点,尤其是重试策略和异常处理方面,这可能也是你遇到问题的根源。让我帮你梳理下并给出改进方案:

原代码存在的问题

  • 缺少重试延迟:当前代码失败后立即发起下一次请求,短时间内高频重试很容易给Solr服务器带来不必要的负载,甚至可能触发限流机制,反而更难拿到成功响应。
  • 未处理请求异常:requests.get()可能会抛出各种异常(比如网络连接失败、超时、DNS解析错误等),一旦出现这类异常,你的循环会直接终止,无法完成后续的重试。
  • 条件判断的可读性可优化:虽然当前的break逻辑功能上没问题,但调整后会更清晰严谨。

改进后的代码

import time
import requests

def main_code():
    # START_OF_THE_CODE
    max_retries = 10
    count = 0
    success = False
    solr_data = "你的Solr查询URL"  # 替换为实际的Solr查询地址
    
    while count < max_retries:
        try:
            # 添加超时时间,避免请求无限等待
            get_data = requests.get(solr_data, timeout=10)
            count += 1
            
            if get_data.status_code == 200:
                success = True
                break
            else:
                print(f"第{count}次查询失败,状态码:{get_data.status_code}")
                # 失败后等待2秒再重试,可根据实际情况调整时长
                time.sleep(2)
        except requests.exceptions.RequestException as e:
            count += 1
            print(f"第{count}次查询抛出异常:{str(e)}")
            time.sleep(2)
    
    if success:
        # 这里处理成功获取到的Solr数据
        print("查询成功,开始处理数据...")
        # REMANING CODE
    else:
        print(f"已重试{max_retries}次,仍无法成功查询Solr")
    # END_OF_THE_CODE

关键改进说明

  • 添加重试延迟:通过time.sleep()让每次失败后等待固定时长再重试,降低服务器压力。
  • 异常捕获机制:用try-except捕获所有requests相关的异常,保证循环能继续执行直到达到最大重试次数。
  • 请求超时设置:给requests.get()加上timeout参数,避免请求因网络问题一直挂起。
  • 清晰的状态标记:新增success变量,让后续代码能更直观地处理查询成功/失败的分支逻辑。
  • 可配置的重试次数:把最大重试次数设为常量max_retries,后续修改更方便。

内容的提问来源于stack exchange,提问作者Sharayu Jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:00:53