使用Python的tenacity库实现异常重试机制
Python异常重试
如果某些方法需要vb.net教程重试,之前都是自己在except里写代码,很多时候实现起来并不方便,而且复杂逻辑下大大增加代码量和影响可读性,尝试了一下tenacity库,重试机制非常简单易用且清晰,且比retrying库简洁很多。
1,第一种常规方式,不借助第三方库,需要自行再except里写代码,真个方python教程法显得十分臃肿
2,第二种方法使用tenacity库,实现起来非常优雅、轻便,当然tenacity库有非常强大的功能,有必要再探索。
demo一下数据库连接的异常重试实现,终于不用再自己写臃肿的重试逻辑了。
import timeimport psycopg2 import datetime from tenacity import *g_attempt = 0# 直接再异常中进行代码的重试,需要一个global的变量做计数器, # 当方法执行发生异常后重试5次,每次间隔10秒 def my_retry_function_v1(conn):global g_attemptconn = Nonetry:conn = psycopg2.connect(**conn)print('my_retry_function execute successfully')g_attempt = 0except Exception as err:g_attempt = g_attempt + 1if g_attempt <= 5:print(str(datetime.datetime.now()) + f' :retry---> {str(err)} ')print(f'retrying: {str(g_attempt)}')time.sleep(10)return my_retry_function_v1(conn)else:#记录异常,这里仅用print示例print('sent a alert notification')if conn:return conn#方法执行发生异常后重试5次,每次间隔10秒 @retry(stop=stop_after_attempt(5), wait=wait_fixed(10)) def my_retry_function_v2(conn):conn = Nonetry:conn = psycopg2.connect(**conn)print('my_retry_function execute successfully')except Exception as err:print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') + f' :retry---> {str(err)} ')#达到最大重试之后,记录异常信息if (my_retry_function_v2.retry.statistics['attempt_number']) == 5:#记录异常,这里仅用print示例print('sent a alert notification')else:#未超出最大重试次数之前,显式抛出异常,继续重试raiseif conn:return connif __name__== '__main__':conn = {'host': '*', 'database': 'postgres', 'user': 'postgres', 'password': '*','port':*}my_retry_function_v1(conn)
使用Python的tenacity库实现异常重试机制相关推荐
- Python之Requests库的异常
Python之Requests库的异常 参考文章: (1)Python之Requests库的异常 (2)https://www.cnblogs.com/BASE64/p/10285466.html 备 ...
- Spring异常重试机制 - Spring Retry
目录 一 . 引入依赖 二 . 在启用类或业务类上添加@EnableRetry注解启用重试机制(在启用类上添加全局有效 , 在业务类上添加仅当前有效) 三 . 使用@Retryable实现重试 四 . ...
- rabbimq消费者实现异常重试机制
功能描述 异常重试指的是当消费者处理消息异常失败时,为保证数据最终一致性,通过设置重试策略来对消息进行重复再消费.对于重试策略我们指定延迟多长时间重试一次,重试多少次,以及时间单位等. 策略描述 原理 ...
- tenacity 报错_tenacity 重试
tenacity 重试 简介 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题.比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题. 这种情况下,我们通常会在代码中加入重试的代码.重 ...
- Java基础学习总结(172)——手写Java 重试机制
package com.zhy.common.retry;import java.util.Arrays;import org.apache.commons.lang3.StringUtils; im ...
- python之Tenacity重试库的使用
目录 安装 Tenacity 导入 Tenacity 模块 为需要重试的函数添加装饰器 调用重试函数 常用的重试方法 Tenacity 示例 Tenacity 是一个用于 Python 的重试库,它提 ...
- 已解决(Python爬虫requests库报错 请求异常SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool
成功解决(Python爬虫requests库报错 请求异常,SSL错误,证书认证失败问题)requests.exceptions.SSLError: HTTPSConnectionPool(host= ...
- Python异常重试解决方案 Python中异常重试的解决方案详解
想了解Python中异常重试的解决方案详解的相关内容吗,标点符在本文为您仔细讲解Python异常重试解决方案的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,重试,python ...
- python脚本运行时网络异常_Python中异常重试的解决方案详解
前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理. 原先的流程: def crawl_page(url): pass def log_ ...
- Python安装sklearn库时出现异常:ERROR: Could not install packages due to an EnvironmentError: [Errno 2]
文章目录 一.问题描述 二.问题解决 一.问题描述 今天在学习python机器学习时,需要安装python的sklearn库,在安装的过程中出现了以下错误 上CSDN上找了好多文章,都没办法解决问题 ...
最新文章
- javaweb学习总结——Filter高级开发
- Windows系统——VMTK安装教程
- objective-c中Category类别(扩展类)专题总结
- Vue根据条件添加click事件
- Android O: View的绘制流程(一): 创建和加载
- mc穿越时空地图android,我的世界RPG地图穿越时空地图存档下载
- 学会java要多久_多长时间可以学会Java?
- 计算机组成原理同步测试,计算机组成原理白中英单元练习题
- wget 下载百度网盘文件
- MySql -- 数据库备份工具xtrabackup
- STM32F4+W25Q64实现一个U盘
- \t转义字符占几个字节?
- 搭建FTP服务器后访问时出现“FTP文件夹错误 无法与服务器建立连接”的解决办法
- 疫情可视化(visualization)
- 搜狗大变动!搜狗收录接下来怎么做?
- zabbix 5系列之snmp监控详解
- 你真的知道什么是三观吗?
- 浮点类型的比较,精度控制(float.h的利用 ,DBL_EPSILON)
- CCIE重认证--350-401-补充题库-也是必须的哟
- C++阶段06笔记01【基于STL的演讲比赛流程管理系统】
热门文章
- PBI培训(3):Power BI主题设置方法汇总及示例
- 软件工程 实践者的研究方法 第12章答案
- 网站调用服务器字体,网站调用字体库
- 将自己的app加入到分享列表中,并适配锤子的one step功能
- 悼念王选:伟大发明家和失意企业家间的孤独者
- 模仿支付宝支付成功特效:svg圆圈转动+打钩
- 随意切换双卡流量,立即获取对应卡的SMIS
- 个人修改机智云apk之出现couldn‘t find “libSDKLog.so“错误导致机智云apk在真机上调试出现keeps stopping错误解决方法
- vivo手机便签app下载,vivo自带便签软件下载
- 488. 祖玛游戏【我亦无他唯手熟尔】