我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python包实现 retrying 重复回调操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python包实现 retrying 重复回调操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python调用pymssql包操作SqlServer数据库的实现

之前的文章介绍了python抓取网页数据并将数据保存到本地excel文件,后续可以将数据保存到数据库(SqlServer、mysql等)中,本文学习python中操作SqlServer数据库的基本用法,后续将从网页中抓取的数据保存到SqlS
2022-06-13

使用 PHP 实现防抖功能,避免重复操作

标题:PHP防抖功能实现示例防抖是前端常用的一种技术,它能够有效避免在某些特定场景下重复触发事件或请求。本文将介绍如何使用 PHP 实现防抖功能,并提供具体的代码示例。防抖的原理很简单,当一个事件在规定的时间内触发多次时,只执行最后一次触发
2023-10-21

Python 实现定积分与二重定积分的操作

1.概述 最近项目需要使用程序实现数学微积分,最初想用java实现,后来发现可用文档太少,实现比较麻烦,后来尝试使用python实现,代码量较少,主要有sympy与scipy两种实现方式,本文主要记录scipy的实现方式。 2.内容 2.1
2022-06-02

python中以函数作为参数(回调函数)的实现方法

这篇文章主要介绍了python中以函数作为参数(回调函数)的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-04

Python如何实现定积分与二重定积分的操作

这篇文章给大家分享的是有关Python如何实现定积分与二重定积分的操作的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.概述最近项目需要使用程序实现数学微积分,最初想用java实现,后来发现可用文档太少,实现比较
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录