脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python包实现 retrying 重复回调操作

python包实现 retrying 重复回调操作

2022-12-02 14:16autofelix Python

这篇文章主要介绍了python包实现 retrying 重复回调操作,文章python的相关资料展开对retrying 重复回调的详细介绍,需要的小伙伴可以参考一下,希望对你的学习有所帮助

一、安装

  • 循环、重复回调我们在很多场景中会用到
  • 不仅在支付场景中,我们需要通过反复的回调知道用户的支付状态
  • 还有在请求中,如果请求失败,我们需要再重新进行进行请求,防止请求异常导致数据缺失
?
1
pip install retrying

二、一直请求

  • 假如我们希望在代码碰到异常时,一直回调,直到成功
  • 下面方法中,我们直接访问一个未定义的变量,肯定会走下面的Exception中
  • 这个时候我们可以将这一次错误写进日志,但是让程序继续执行这个方法,直到没有异常为止
  • 因为这里模拟的是肯定有异常,所以该程序会一直返回回调,不间断的循环往复
?
1
2
3
4
5
6
7
8
9
10
11
12
from retrying import retry
 
@retry()
def say():
try:
autofelix
except Exception as e:
# 可以将错误记录日志
print(e)
raise
 
say()

三、设置最大运行次数

  • 如果我们在请求中遇到异常时候
  • 可以通过 stop_max_attempt_number 设置一个最大运行次数
  • 当回调次数超过设置值,将不再执行回调
  • 这里我们设置最大运行次数为5次
?
1
2
3
4
5
6
7
8
9
10
11
12
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 设置失败重试的最大时间, 单位毫秒
  • 超出时间,则停止重试
?
1
2
3
4
5
6
7
8
9
10
11
12
from retrying import retry
 
@retry(stop_max_delay=1000)
def say():
try:
autofelix
except Exception as e:
# 可以将错误记录日志
print(e)
raise
 
say()

五、设置间隔时间

  • 设置失败重试的间隔时间, 单位毫秒
  • 降低回调频率
?
1
2
3
4
5
6
7
8
9
10
11
12
from retrying import retry
 
@retry(wait_fixed=1000)
def say():
try:
autofelix
except Exception as e:
# 可以将错误记录日志
print(e)
raise
 
say()

六、设置随机间隔时间

  • 设置失败重试随机性间隔时间, 单位毫秒
  • 可以使得访问频率不均匀
?
1
2
3
4
5
6
7
8
9
10
11
12
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 最大间隔时间
?
1
2
3
4
5
6
7
8
9
10
11
12
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,则其他类型异常
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,则继续回调,否则就结束
?
1
2
3
4
5
6
7
8
9
10
11
12
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配合使用,则后两者会失效
?
1
2
3
4
5
6
7
8
9
10
11
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 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.51cto.com/autofelix/5217848

延伸 · 阅读

精彩推荐
  • Python解析python调用函数加括号和不加括号的区别

    解析python调用函数加括号和不加括号的区别

    这篇文章主要介绍了python调用函数加括号和不加括号的区别,不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完...

    不积硅步,无以至千里9672022-02-18
  • Pythonpython可视化plotly 图例(legend)设置

    python可视化plotly 图例(legend)设置

    这篇文章主要介绍了python可视化plotly 图例(legend)设置,主要介绍了关于python 的legend图例,参数使用说明,具有很好的参考价值,希望对大家有所帮助,需要的...

    Eloik7552022-10-05
  • PythonPython微型Web框架Flask快速入门

    Python微型Web框架Flask快速入门

    微型意味着Flask本身只提供了简单的核心的功能,但它具备了强大的可扩展性。比如,它不会强制你使用某个ORM框架,而是把选择权交给你,让你自己决定...

    dongfanger9072021-07-29
  • PythonPython基础教程学习笔记 第二章 列表和元组

    Python基础教程学习笔记 第二章 列表和元组

    这篇文章主要介绍了Python基础教程学习笔记 第二章 列表和元组,需要的朋友可以参考下...

    Python教程网8312021-03-14
  • Python详解Python装饰器

    详解Python装饰器

    这篇文章主要介绍了Python装饰器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起...

    Lockegogo6762021-06-09
  • Pythonpython实现批量按比例缩放图片效果

    python实现批量按比例缩放图片效果

    这篇文章主要为大家详细介绍了python实现批量按比例缩放图片效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    skillart11342021-01-25
  • Pythonpython人工智能自定义求导tf_diffs详解

    python人工智能自定义求导tf_diffs详解

    这篇文章主要为大家介绍了python人工智能自定义求导tf_diffs详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    plum_blossom11732022-07-29
  • PythonPython脚本制作天气查询实例代码

    Python脚本制作天气查询实例代码

    在本篇文章里小编给大家整理的是一篇关于Python脚本制作天气查询实例代码实例,有兴趣的朋友们可以参考学习下。...

    小妮浅浅12272021-12-17