python包实现 retrying 重复回调操作

 更新时间:2022年04月19日 17:32:05   作者:autofelix   
这篇文章主要介绍了python包实现 retrying 重复回调操作,文章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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PyQt5+pycharm开发环境搭建的实现步骤(图文)

    PyQt5+pycharm开发环境搭建的实现步骤(图文)

    本文针对创建PyQt运行环境+PyCharm开发环境的过程进行记录,文中通过图片示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • python flask框架实现重定向功能示例

    python flask框架实现重定向功能示例

    这篇文章主要介绍了python flask框架实现重定向功能,结合实例形式分析了flask框架重定向功能的实现与使用方法,需要的朋友可以参考下
    2019-07-07
  • 深入解析python项目引用运行路径

    深入解析python项目引用运行路径

    这篇文章主要介绍了python项目引用运行路径的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Django1.11自带分页器paginator的使用方法

    Django1.11自带分页器paginator的使用方法

    这篇文章主要为大家详细介绍了Django1.11自带分页器Django的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Python安装Numpy出现异常信息简单解决办法

    Python安装Numpy出现异常信息简单解决办法

    在安装Python的Numpy包时,可能会遇到路径警告或包源超时的问题,首先,如果出现包源超时,可以尝试更换为国内的镜像源,如清华大学镜像源,其次,如果在安装完成后提示将某个路径添加到PATH环境变量,按照提示操作即可消除异常,需要的朋友可以参考下
    2024-09-09
  • Python实现字符型图片验证码识别完整过程详解

    Python实现字符型图片验证码识别完整过程详解

    这篇文章主要介绍了Python实现字符型图片验证码识别完整过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python函数存储在模块的优点及用法总结

    python函数存储在模块的优点及用法总结

    在本篇文章里小编给大家整理了一篇关于python函数存储在模块的优点及用法相关内容,有兴趣的朋友们可以跟着学习下。
    2021-10-10
  • 对python3 Serial 串口助手的接收读取数据方法详解

    对python3 Serial 串口助手的接收读取数据方法详解

    今天小编就为大家分享一篇对python3 Serial 串口助手的接收读取数据方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python实现将doc转化pdf格式文档的方法

    Python实现将doc转化pdf格式文档的方法

    这篇文章主要介绍了Python实现将doc转化pdf格式文档的方法,结合实例形式分析了Python实现doc格式文件读取及转换pdf格式文件的操作技巧,以及php调用py文件的具体实现方法,需要的朋友可以参考下
    2018-01-01
  • Python处理字符串中文(汉字)编码的实例

    Python处理字符串中文(汉字)编码的实例

    这篇文章主要介绍了Python处理字符串中文(汉字)编码的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04

最新评论