如何实现Redis轮询检查rpm文件transfer状态及超时处理?
问题解决:Redis轮询判断文件传输状态
首先看你提供的Redis返回JSON结构,transfer字段是布尔值(true),不是字符串,原代码里用output_json["transfer"] == "true"会判断失败,这是第一个要修正的点。
另外,轮询过程中需要添加短时间休眠,避免高频请求Redis占用资源;同时要处理超时后的逻辑,输出transfer_status_report的值。
以下是完善后的代码:
import json import time start_time = time.time() timeout = 300 # 5分钟,单位秒 poll_interval = 5 # 轮询间隔,单位秒,可根据需求调整 output_json = retrieve_status_from_redis() while time.time() < start_time + timeout: if output_json["file_extension"] == "rpm": # 注意:原JSON中transfer是布尔值,直接判断即可,不用字符串比较 if output_json["transfer"] is True: print(f"Transfer successful for the file") break else: # 轮询间隔休眠,避免频繁请求 time.sleep(poll_interval) # 重新从Redis获取最新状态 output_json = retrieve_status_from_redis() else: # 如果不是rpm扩展名,直接退出循环(根据需求调整,若不需要可删除) print("File extension is not rpm, skip transfer check") break else: # 循环正常结束(未触发break),说明超时 print(f"Transfer timeout: {output_json['transfer_status_report']}")
关键改动说明:
- 修正
transfer字段的判断逻辑:从字符串比较改为布尔值判断is True,匹配Redis返回的JSON结构 - 添加
poll_interval轮询间隔,每次轮询前休眠,降低Redis请求频率 - 新增
while-else结构:当循环因超时结束(没有触发break),自动执行超时逻辑,输出transfer_status_report - 补充非rpm扩展名的处理分支(可根据实际需求保留或删除)
内容的提问来源于stack exchange,提问作者Rafa S
相关产品推荐
相关产品推荐

