35 lines
904 B
Python
35 lines
904 B
Python
# -*- coding = utf-8 -*-
|
|
# @Time : 2025/2/13 下午7:40
|
|
# @File : helper.py
|
|
# @Software : PyCharm
|
|
# @Author : xingc
|
|
# @Desc :
|
|
import asyncio
|
|
import functools
|
|
from typing import Callable
|
|
|
|
|
|
def async_retry(max_retries: int = 3, exceptions: tuple = (Exception,)):
|
|
"""
|
|
异步重试装饰器。
|
|
|
|
:param max_retries: 最大重试次数。
|
|
:param exceptions: 触发重试的异常类型。
|
|
"""
|
|
|
|
def decorator(func: Callable):
|
|
@functools.wraps(func)
|
|
async def wrapper(*args, **kwargs):
|
|
retries = 0
|
|
while retries < max_retries:
|
|
try:
|
|
return await func(*args, **kwargs)
|
|
except exceptions as e:
|
|
retries += 1
|
|
if retries >= max_retries:
|
|
raise # 如果达到最大重试次数,抛出异常
|
|
|
|
return wrapper
|
|
|
|
return decorator
|