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
相关产品推荐
相关产品推荐

