fix: retry error

This commit is contained in:
Chenyme committed 2025-12-17 00:43:44 +08:00
1 parent a2d59860a9
commit 7ffb185951
5 files changed
+38 -35

No files matched your search

+5 -4
View File
@@ -64,7 +64,7 @@ class CacheService:
retry_codes = setting.grok_config.get("retry_status_codes", [401, 429])
MAX_OUTER_RETRY = 3
for outer_retry in range(MAX_OUTER_RETRY):
for outer_retry in range(MAX_OUTER_RETRY + 1): # +1 确保实际重试3次
try:
# 内层重试:403代理池重试(cache使用缓存代理,不支持代理池,所以403只重试一次)
max_403_retries = 5
@@ -105,9 +105,10 @@ class CacheService:
# 检查可配置状态码错误 - 外层重试
if response.status_code in retry_codes:
if outer_retry < MAX_OUTER_RETRY - 1:
self._log("warning", f"遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY})...")
await asyncio.sleep(0.5)
if outer_retry < MAX_OUTER_RETRY:
delay = (outer_retry + 1) * 0.1 # 渐进延迟:0.1s, 0.2s, 0.3s
self._log("warning", f"遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY}),等待{delay}s...")
await asyncio.sleep(delay)
break # 跳出内层循环,进入外层重试
else:
self._log("error", f"{response.status_code}错误,已重试{outer_retry}次,放弃")
+6 -7
View File
@@ -234,20 +234,19 @@ class GrokClient:
proxies=proxies
)
# 检查是否是403错误
if response.status_code == 403:
# 内层403重试:仅当有代理池时触发
if response.status_code == 403 and proxy_pool._enabled:
retry_count += 1
# 如果使用代理池且未达到最大重试次数,继续重试
if proxy_pool._enabled and retry_count <= max_retries:
if retry_count <= max_retries:
logger.warning(f"[Client] 遇到403错误,正在重试 ({retry_count}/{max_retries})...")
await asyncio.sleep(0.5) # 短暂延迟
await asyncio.sleep(0.5)
continue
# 达到最大重试次数或未使用代理池,抛出错误
# 内层重试全部失败
logger.error(f"[Client] 403错误,已重试{retry_count-1}次,放弃")
GrokClient._handle_error(response, token)
# 检查响应状态
if response.status_code != 200:
GrokClient._handle_error(response, token)
+9 -8
View File
@@ -55,7 +55,7 @@ class PostCreateManager:
retry_codes = setting.grok_config.get("retry_status_codes", [401, 429])
MAX_OUTER_RETRY = 3
for outer_retry in range(MAX_OUTER_RETRY):
for outer_retry in range(MAX_OUTER_RETRY + 1): # +1 确保实际重试3次
# 内层重试:403代理池重试
max_403_retries = 5
retry_403_count = 0
@@ -84,23 +84,24 @@ class PostCreateManager:
proxies=proxies
)
# 检查403错误 - 内层重试
if response.status_code == 403:
# 内层403重试:仅当有代理池时触发
if response.status_code == 403 and proxy_pool._enabled:
retry_403_count += 1
if proxy_pool._enabled and retry_403_count <= max_403_retries:
if retry_403_count <= max_403_retries:
logger.warning(f"[PostCreate] 遇到403错误,正在重试 ({retry_403_count}/{max_403_retries})...")
await asyncio.sleep(0.5)
continue
# 内层重试全部失败
logger.error(f"[PostCreate] 403错误,已重试{retry_403_count-1}次,放弃")
raise GrokApiException(f"创建失败: 403错误", "CREATE_ERROR")
# 检查可配置状态码错误 - 外层重试
if response.status_code in retry_codes:
if outer_retry < MAX_OUTER_RETRY - 1:
logger.warning(f"[PostCreate] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY})...")
await asyncio.sleep(0.5)
if outer_retry < MAX_OUTER_RETRY:
delay = (outer_retry + 1) * 0.1 # 渐进延迟:0.1s, 0.2s, 0.3s
logger.warning(f"[PostCreate] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY}),等待{delay}s...")
await asyncio.sleep(delay)
break # 跳出内层循环,进入外层重试
else:
logger.error(f"[PostCreate] {response.status_code}错误,已重试{outer_retry}次,放弃")
+9 -8
View File
@@ -323,7 +323,7 @@ class GrokTokenManager:
retry_codes = setting.grok_config.get("retry_status_codes", [401, 429])
MAX_OUTER_RETRY = 3
for outer_retry in range(MAX_OUTER_RETRY):
for outer_retry in range(MAX_OUTER_RETRY + 1): # +1 确保实际重试3次
# 内层重试:403代理池重试
max_403_retries = 5
retry_403_count = 0
@@ -351,26 +351,27 @@ class GrokTokenManager:
proxies=proxies
)
# 检查403错误 - 内层重试
if response.status_code == 403:
# 内层403重试:仅当有代理池时触发
if response.status_code == 403 and proxy_pool._enabled:
retry_403_count += 1
if proxy_pool._enabled and retry_403_count <= max_403_retries:
if retry_403_count <= max_403_retries:
logger.warning(f"[Token] 遇到403错误,正在重试 ({retry_403_count}/{max_403_retries})...")
await asyncio.sleep(0.5)
continue
# 内层重试全部失败
logger.error(f"[Token] 403错误,已重试{retry_403_count-1}次,放弃")
sso = self._extract_sso(auth_token)
if sso:
await self.record_failure(auth_token, 403, "服务器被Block")
return None
# 检查可配置状态码错误 - 外层重试
if response.status_code in retry_codes:
if outer_retry < MAX_OUTER_RETRY - 1:
logger.warning(f"[Token] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY})...")
await asyncio.sleep(0.5)
if outer_retry < MAX_OUTER_RETRY:
delay = (outer_retry + 1) * 0.1 # 渐进延迟:0.1s, 0.2s, 0.3s
logger.warning(f"[Token] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY}),等待{delay}s...")
await asyncio.sleep(delay)
break # 跳出内层循环,进入外层重试
else:
logger.error(f"[Token] {response.status_code}错误,已重试{outer_retry}次,放弃")
+9 -8
View File
@@ -61,7 +61,7 @@ class ImageUploadManager:
retry_codes = setting.grok_config.get("retry_status_codes", [401, 429])
MAX_OUTER_RETRY = 3
for outer_retry in range(MAX_OUTER_RETRY):
for outer_retry in range(MAX_OUTER_RETRY + 1): # +1 确保实际重试3次
try:
# 内层重试:403代理池重试
max_403_retries = 5
@@ -98,23 +98,24 @@ class ImageUploadManager:
proxies=proxies,
)
# 检查403错误 - 内层重试
if response.status_code == 403:
# 内层403重试:仅当有代理池时触发
if response.status_code == 403 and proxy_pool._enabled:
retry_403_count += 1
if proxy_pool._enabled and retry_403_count <= max_403_retries:
if retry_403_count <= max_403_retries:
logger.warning(f"[Upload] 遇到403错误,正在重试 ({retry_403_count}/{max_403_retries})...")
await asyncio.sleep(0.5)
continue
# 内层重试全部失败
logger.error(f"[Upload] 403错误,已重试{retry_403_count-1}次,放弃")
return "", ""
# 检查可配置状态码错误 - 外层重试
if response.status_code in retry_codes:
if outer_retry < MAX_OUTER_RETRY - 1:
logger.warning(f"[Upload] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY})...")
await asyncio.sleep(0.5)
if outer_retry < MAX_OUTER_RETRY:
delay = (outer_retry + 1) * 0.1 # 渐进延迟:0.1s, 0.2s, 0.3s
logger.warning(f"[Upload] 遇到{response.status_code}错误,外层重试 ({outer_retry+1}/{MAX_OUTER_RETRY}),等待{delay}s...")
await asyncio.sleep(delay)
break # 跳出内层循环,进入外层重试
else:
logger.error(f"[Upload] {response.status_code}错误,已重试{outer_retry}次,放弃")