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_delaystop_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 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python异常处理如何才能写得优雅(retrying模块)

    目录 前言 不负责任版本 简单处理版本 改进处理版本 安装与使用 安装 使用 总结 前言 在写程序时,我们会经常碰到程序出现异常,这时候我们就不得不处理这些异常,以保证程序的健壮性. 处理异常的版本有以下几种,你通常的做法是哪种? 不负责任版本 这种情况下,不作任何处理,任由程序报错,从而导致程序中断. 针对简单的程序,这样做没什么问题,大不了我遇到问题之后把问题解决,然后重新运行.但是如果是复杂的系统就会很麻烦了,可能你一个异常阻塞了系统的运行,带来灾难性的后果. 简单处理版本 简单处理版本,

  • Python retrying 重试机制的使用方法

    目录 循环加判断 retrying 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制.下面来说一下Python中的重试方法. 循环加判断 最简单的重试方式就是在需要进行重试的代码片段上加一个循环,程序内捕获异常,如果执行成功就退出循环,执行失败就就重复执行相关代码,例如: import requests def req_with_retry(url): retry_max = 10 # 最大重试次数为10次

  • python自动重试第三方包retrying模块的方法

    retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试. 最近写了一个爬虫,需要连接国外的一个网站,经常出现掉线的情况,自己写了一个自动重连的代码,但感觉不够简洁... 后来就上万能的github,找到了一个第三包,基本能满足我的要求.这个第三方包就是retrying. 我的需求就是每当出现request相关异常的时候,就自动重来,上限连接10次:

  • Python retrying 重试机制详解

    目录 循环加判断 retrying 总结 我们在程序开发中,经常会需要请求一些外部的接口资源,而且我们不能保证每次请求一定会成功,所以这些涉及到网络请求的代码片段就需要加上重试机制.下面来说一下Python中的重试方法. 循环加判断 最简单的重试方式就是在需要进行重试的代码片段上加一个循环,程序内捕获异常,如果执行成功就退出循环,执行失败就就重复执行相关代码,例如: import requests def req_with_retry(url): retry_max = 10 # 最大重试次数为

  • python retrying模块的使用方法详解

    前言 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的模块,retrying. 安装 retrying模块的安装很简单直接用匹配安装即可. pip install retrying retring模块通过装饰器的形式来进行重试操作的,首先我们看一个简单的例子 from retrying import retry @retry(stop_max_attempt_number=

  • python包实现 retrying 重复回调操作

    目录 一.安装 二.一直请求 三.设置最大运行次数 四.设置重试的最大时间 五.设置间隔时间 六.设置随机间隔时间 七.随机倍数间隔时间 八.指定异常类型 九.过滤回调 十.异常执行 一.安装 循环.重复回调我们在很多场景中会用到 不仅在支付场景中,我们需要通过反复的回调知道用户的支付状态 还有在请求中,如果请求失败,我们需要再重新进行进行请求,防止请求异常导致数据缺失 pip install retrying 二.一直请求 假如我们希望在代码碰到异常时,一直回调,直到成功 下面方法中,我们直接

  • python 包实现 time 时间管理操作

    目录 一.当前时间戳 二.获取当前时间字符串 三.获取当前计算机时间格式 四.格式化时间显示 五.字符串转为计算机格式 六.精确时间计数值 七.休眠等待 一.当前时间戳 获取当前时间戳,即当前系统内表示时间的一个浮点数 import time time.time() 二.获取当前时间字符串 获取当前时间,并返回一个以人类可读方式的字符串 import time time.ctime() 三.获取当前计算机时间格式 获取当前时间,并返回计算机可处理的时间格式 import time time.gm

  • python 包实现 urllib 网络请求操作

    目录 一.简介 二.发起请求 三.携带参数请求 四.获取响应数据 五.设置headers 六.使用代理 七.认证登录 八.设置cookie 九.异常处理 十.HTTP异常 十一.超时异常 十二.解析编码 十三.参数拼接 十四.请求链接解析 十五.拼接链接 十六.字典转换参数 一.简介 是一个 python 内置包,不需要额外安装即可使用 urllib 是 Python 标准库中用于网络请求的库,内置四个模块,分别是 urllib.request:用来打开和读取 url,可以用它来模拟发送请求,获

  • python 删除excel表格重复行,数据预处理操作

    使用python删除excel表格重复行. # 导入pandas包并重命名为pd import pandas as pd # 读取Excel中Sheet1中的数据 data = pd.DataFrame(pd.read_excel('test.xls', 'Sheet1')) # 查看读取数据内容 print(data) # 查看是否有重复行 re_row = data.duplicated() print(re_row) # 查看去除重复行的数据 no_re_row = data.drop_d

  • 使用anaconda的pip安装第三方python包的操作步骤

    相比于原生的python开发核心包,Anaconda已经集成了许多的第三方库,但是这在实际应用中是远远不够的,因此我们需要手动安装第三方库 使用pip可以快速的安装这些库 启动anaconda命令窗口: 开始> 所有程序> Anaconda Command Prompt 输入pip,可以查看pip指令的用法和相关的提示信息 pip install buitwith,可以开始安装buitwith库 以上这篇使用anaconda的pip安装第三方python包的操作步骤就是小编分享给大家的全部内容

  • Python list列表中删除多个重复元素操作示例

    本文实例讲述了Python list列表中删除多个重复元素操作.分享给大家供大家参考,具体如下: 我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) print(l) 结果为:[9, 5, 6, 6, 7, 8, 9, 6, 0],只删除了第一个为6的元素. 如果采用for循环遍历各元素: for x in l: if x == 6: l.remove(x) 结果为[9, 5, 7, 8, 9

  • python 包 requests 实现请求操作

    目录 一.安装 二.请求类型 三.带参数请求 四.自定义headers 五.请求属性 六.文件上传 七.会话维持 八.证书验证 九.代理设置 十.超时设置 十一.认证设置 十二.异常处理 一.安装 pip install requests 二.请求类型 import requests requests.get('https://www.baidu.com') requests.post('https://www.baidu.com') requests.put('https://www.baid

  • python 包实现JSON 轻量数据操作

    目录 一.将对象转为json字符串 二.格式化输出 三.将json字符串转为对象 四.安装demjson 五.将对象转为json字符串 六.将json字符串转为对象 一.将对象转为json字符串 json.dumps:将 Python 对象编码成 JSON 字符串 json.loads:将已编码的 JSON 字符串解码为 Python 对象 import json data = [ { 'name' : 'autofelix', 'age' : 27}, { 'name' : '飞兔', 'ag

  • Python技巧匿名函数、回调函数和高阶函数

    目录 1.定义匿名或内联函数 2.在匿名函数中绑定变量的值 3.让带有n个参数的可调用对象以较少的参数调用 4.在回调函数中携带额外的状态 1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数. 如下图所示: add = lambda x, y: x + y print(add(2, 3)) # 5 print(add("hello", &

  • Python包管理工具pip用法详解

    pip提供我们各色各样的软件(第三方库),而这些第三方库又可以给我们实现各种各样不同的功能,科学计算.画图.操作文件.聊天…… 我们可以通过Cmd终端.Pycharm.Jupyter三种平台使用pip安装这些第三方库. 官方Python 第三方库软件包地址:PyPI · Python 包索引 Anaconda,Conda,Pip的关系 Anaconda是一个python发行版.软件发行版是在系统上提前编译和配置好的软件包集合, 装好了后就可以直接用. Conda是一个包管理器.包管理器是自动化软

随机推荐