修复:截图处理器 Redis 断线后无法自动重连的死循环
- 重连失败时不再置 cloud_redis=None,避免后续循环走错分支 - except Exception 分支增加 cloud_redis is None 判断,主动触发重连 - 重连成功后重置退避计时器
This commit is contained in:
@@ -127,12 +127,12 @@ class ScreenshotHandler:
|
||||
|
||||
# ==================== 重连 ====================
|
||||
|
||||
def _reconnect_cloud_redis(self):
|
||||
"""重建云端 Redis 连接"""
|
||||
def _reconnect_cloud_redis(self) -> bool:
|
||||
"""重建云端 Redis 连接,返回是否成功"""
|
||||
try:
|
||||
from core.config_sync import _build_keepalive_options
|
||||
cfg = self._settings.cloud_redis
|
||||
self._cloud_redis = redis.Redis(
|
||||
new_client = redis.Redis(
|
||||
host=cfg.host,
|
||||
port=cfg.port,
|
||||
db=cfg.db,
|
||||
@@ -145,11 +145,14 @@ class ScreenshotHandler:
|
||||
socket_keepalive_options=_build_keepalive_options(),
|
||||
health_check_interval=15,
|
||||
)
|
||||
self._cloud_redis.ping()
|
||||
new_client.ping()
|
||||
self._cloud_redis = new_client
|
||||
logger.info("[截图] 云端 Redis 重连成功")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.warning("[截图] 云端 Redis 重连失败: %s", e)
|
||||
self._cloud_redis = None
|
||||
# 不置 None,避免后续循环永远无法触发 ConnectionError 重连
|
||||
return False
|
||||
|
||||
# ==================== 主循环 ====================
|
||||
|
||||
@@ -196,16 +199,25 @@ class ScreenshotHandler:
|
||||
if self._stop_event.is_set():
|
||||
return
|
||||
logger.warning("[截图] 云端 Redis 连接断开: %s, %ds 后重连...", e, backoff)
|
||||
self._reconnect_cloud_redis()
|
||||
self._stop_event.wait(backoff)
|
||||
self._reconnect_cloud_redis()
|
||||
backoff = min(backoff * 2, max_backoff)
|
||||
|
||||
except Exception as e:
|
||||
if self._stop_event.is_set():
|
||||
return
|
||||
logger.warning("[截图] 监听异常: %s, %ds 后重试", e, backoff)
|
||||
self._stop_event.wait(backoff)
|
||||
backoff = min(backoff * 2, max_backoff)
|
||||
# cloud_redis 为 None 时主动重连,避免死循环
|
||||
if self._cloud_redis is None:
|
||||
logger.warning("[截图] 云端 Redis 未连接, %ds 后重连...", backoff)
|
||||
self._stop_event.wait(backoff)
|
||||
if self._reconnect_cloud_redis():
|
||||
backoff = 5 # 重连成功,重置退避
|
||||
else:
|
||||
backoff = min(backoff * 2, max_backoff)
|
||||
else:
|
||||
logger.warning("[截图] 监听异常: %s, %ds 后重试", e, backoff)
|
||||
self._stop_event.wait(backoff)
|
||||
backoff = min(backoff * 2, max_backoff)
|
||||
|
||||
# ==================== 请求处理 ====================
|
||||
|
||||
|
||||
Reference in New Issue
Block a user