python 如何优雅的使用retrying进行重试请求

发布时间 2023-11-02 10:11:58作者: 北京测试菜鸟

retrying 模块

一、 简介

retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试

安装:

pip install retrying

  

二、 使用方法

1、 无参数

使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止。

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: 用来设定重试的最大次数,超过该次数就会停止

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:重试多长时间,单位:毫秒

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:每次重试之间的固定等待时间(毫秒)

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之间的停留最短/最长时间

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]:重试尝试中增加时间间隔

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 其他可用参数

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,