fix: retry error
This commit is contained in:
1 parent
a2d59860a9
commit
7ffb185951
5 files changed
+38
-35
No files matched your search
@@ -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}次,放弃")
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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}次,放弃")
|
||||
|
||||
@@ -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}次,放弃")
|
||||
|
||||
@@ -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}次,放弃")
|
||||
|
||||
Reference in new issue
Block a user