python包中的 retrying 重复回调
目录
一、安装二、一直请求三、设置最大运行次数四、设置重试的最大时间五、设置间隔时间六、设置随机间隔时间七、随机倍数间隔时间八、指定异常类型九、过滤回调十、异常执行一、安装
循环、重复回调我们在很多场景中会用到不仅在支付场景中,我们需要通过反复的回调知道用户的支付状态还有在请求中,如果请求失败,我们需要再重新进行进行请求,防止请求异常导致数据缺失pip install retrying
二、一直请求
假如我们希望在代码碰到异常时,一直回调,直到成功下面方法中,我们直接访问一个未定义的变量,肯定会走下面的Exception中这个时候我们可以将这一次错误写进日志,但是让程序继续执行这个方法,直到没有异常为止因为这里模拟的是肯定有异常,所以该程序会一直返回回调,不间断的循环往复from retrying import retry @retry() def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
三、设置最大运行次数
如果我们在请求中遇到异常时候可以通过 stop_max_attempt_number 设置一个最大运行次数当回调次数超过设置值,将不再执行回调这里我们设置最大运行次数为5次from retrying import retry @retry(stop_max_attempt_number=5) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
四、设置重试的最大时间
可以通过stop_max_delay
设置失败重试的最大时间, 单位毫秒超出时间,则停止重试
from retrying import retry @retry(stop_max_delay=1000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
五、设置间隔时间
设置失败重试的间隔时间, 单位毫秒降低回调频率from retrying import retry @retry(wait_fixed=1000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
六、设置随机间隔时间
设置失败重试随机性间隔时间, 单位毫秒可以使得访问频率不均匀from retrying import retry @retry(wait_random_min=5000, wait_random_max=50000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
七、随机倍数间隔时间
可以通过设置wait_exponential_multiplier
间隔时间倍数增加可以通过设置wait_exponential_max
最大间隔时间
from retrying import retry @retry(wait_exponential_multiplier=1000, wait_exponential_max=10000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
八、指定异常类型
可以通过retry_on_exception
设置指定异常类型指定的异常类型会重试,不指定的类型,会直接异常退出如果设置 wrap_exception
参数为True
,则其他类型异常
from retrying import retry def retry_error(exception): return isinstance(exception, RetryError) # 会重复调用 @retry(etry_on_exception=retry_error) def say(): try: autofelix except RetryError as e: raise RetryError # 只调用一次 @retry(etry_on_exception=retry_error, wrap_exception=True) def say(): raise Exception("a") say()
九、过滤回调
可以设置retry_on_result
指定哪些结果需要去回调将请求结果放到 retry_on_result
指定方法中进行过滤,如果返回None,则继续回调,否则就结束
from retrying import retry def retry_filter(result): print("this is result") return result is not None @retry(retry_on_result=retry_filter) def say(): print("Retry forever ignoring Exceptions with no wait if return value is None") return None say()
十、异常执行
通过设置stop_func
每次抛出异常时都会执行的函数如果和stop_max_delay
、stop_max_attempt_number
配合使用,则后两者会失效
from retrying import retry def stop_record(attempts, delay): print("logging %d--->%d" % (attempts,delay)) @retry(stop_max_delay=10, stop_func=stop_record) def say(): print("i am autofelix") raise Exception say()
到此这篇关于python 包之 retrying 重复回调的文章就介绍到这了,更多相关python retrying 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?