在python中,我们经常需要创建一个retry方法去进行循环跑脚本
retry的用法是,将某一个方法,存放到retry中,进行判断是否正常,如果不正常,抛出raise异常,告诉retry,有异常,当捕获到异常后,进行循环次数
retry方法
import time import sys from ultils.log_helper import TscLogger class retry(object): def __init__(self, stop_max_attempt_number=3, wait_fixed=0.5, exceptions=(Exception,), is_log=True, msg='Sharepoint尝试连接3次失败'): self.stop_max_attempt_number = stop_max_attempt_number self.wait_fixed = wait_fixed self.exceptions = exceptions self.is_log = is_log self.msg = msg def __call__(self, func): def wrapper(*args, **kwargs): for i in range(self.stop_max_attempt_number): try: result = func(*args, **kwargs) except self.exceptions: print('尝试第' + str(i+1) +'次') time.sleep(self.wait_fixed) if i == self.stop_max_attempt_number - 1 and self.is_log: TscLogger().error(msg=str(self.exceptions[0]) + self.msg) sys.exit(1) continue else: return result return wrapper
调用retry方法
from config.config import get_config
from ultils.SharepointSDK.SharepointApi import SharepointApi
from ultils.log_helper import TscLogger
from config.retry import retry
class Down_sp():
def __init__(self):
pass
#self.location = location
# sharepoint拉取文件至本地,并移动到backup里
@retry(stop_max_attempt_number=3, wait_fixed=0.5)
def operate_sharepoint_files(self, location, move_file=False):
share_point = SharepointApi(get_config(["sharepoint", "refresh_token"]))
down = share_point.share.download_all_files(location, move_file)
return down