python 如何优雅的使用retrying进行重试请求
retrying 模块
一、 简介
retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试
安装:
1 | pip install retrying |
二、 使用方法
1、 无参数
使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry # 使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止 def get_random(): count = randint( 0 , 20 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2、 有参数
2.1 stop_max_attempt_number
stop_max_attempt_number
: 用来设定重试的最大次数,超过该次数就会停止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry (stop_max_attempt_number = 3 ) def get_random(): count = randint( 0 , 100 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2.2 stop_max_delay
stop_max_delay
:重试多长时间,单位:毫秒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry (stop_max_delay = 100 ) def get_random(): count = randint( 0 , 20 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2.3 wait_fixed
wait_fixed
:每次重试之间的固定等待时间(毫秒)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry (wait_fixed = 2 ) def get_random(): count = randint( 0 , 100 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2.4 wait_random_[min/max]
wait_random_[min/max]
: 两次retrying之间的停留最短/最长时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry (wait_random_min = 1 , wait_random_max = 9 ) def get_random(): count = randint( 0 , 100 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2.5 wait_exponential_[multiplier/max]
wait_exponential_[multiplier/max]:重试尝试中增加时间间隔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from retrying import retry from random import randint @retry (wait_exponential_multiplier = 100 , wait_exponential_max = 10000 ) def get_random(): count = randint( 0 , 100 ) if count > 0 : print (f "该随机数等于{count}" ) raise IOError( "该随机数大于0" ) else : return count print (f "该随机数等于{get_random()}" ) |
2.6 其他可用参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Retrying( object ): def __init__( self , stop = None , wait = None , # 停止时间和等待时间 stop_max_attempt_number = None , # 最大尝试次数 stop_max_delay = None , # 最大运行时间 wait_fixed = None , # 延迟时间 wait_random_min = None , wait_random_max = None , # 随机等待时间 wait_incrementing_start = None , wait_incrementing_increment = None , # 运行下次,增加延时 wait_incrementing_max = None , wait_exponential_multiplier = None ,wait_exponential_max = None , # 等待时间按指数形式增长 retry_on_exception = None , retry_on_result = None , wrap_exception = False , stop_func = None , # 每次完成后运行的新函数 wait_func = None , wait_jitter_max = None , before_attempts = None , after_attempts = None , |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构