python中可以发生异常自动重试库retrying

  • Post category:Python

retrying是一个Python库,它为开发人员提供了自动重试 Python 函数执行的简单而强大的方法。该库可以被应用于调用远程API,访问外部网站,以及其他网络相关的操作。以下是关于使用retrying的完整攻略。

安装

使用pip命令可以简单地安装retrying库:

pip install retrying

基本用法

以下是引入retrying库和一个基本用例的示例:

import retrying

@retrying.retry(stop_max_attempt_number=3)
def say_hello():
    print("Hello world")
    raise Exception()

say_hello()

输出:

Hello world
Hello world
Hello world
Traceback (most recent call last):
   ...
Exception

由于在第一次执行中引发了异常,执行被重试三次,都以失败告终。

在这个例子中,@retrying.retry仅装饰 say_hello()函数并对其进行监控,stop_max_attempt_number参数告诉函数只尝试3次,而由于使用了“raise Exception()”,函数每次执行都会失败。

retrying库提供了许多其他选项,可用于控制自动重试方案。下面提供了更多示例:

示例1: 按指数进行退避

指数倒退是当重试次数增加时,应用等待时间的指数级退避算法。以下示例演示了如何使用指数退避计算方法:

import time
import retrying

@retrying.retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=3)
def say_hello():
    print("Hello world")
    raise Exception()

say_hello()

输出:

Hello world
(wait 1.0 seconds)
Hello world
(wait 2.0 seconds)
Hello world
Traceback (most recent call last):
   ...
Exception

在这个例子中,重试间隔自动增加,以指数级退避算法。wait_exponential_multiplier设置退避递增的时间,wait_exponential_max 设置允许增加的时间最大值。

示例2: 如何处理特定异常

以下是一个演示如何处理特定异常的示例,这里使用了@retrying.retry_on_exception:

import random
import retrying

def exception_func():
    if random.randint(0,10) < 6:
        print("错误")
        raise ValueError("值错误")
    else:
        print("pass")

@retrying.retry(retry_on_exception=ValueError, wait_fixed=2000, stop_max_attempt_number=3)
def say_hello():
        exception_func()

say_hello()

输出:

错误
(wait 2.0 seconds)
错误
(wait 2.0 seconds)
错误

在这个例子中,引用了exception_func()函数模拟随机的抛出ValueError异常。通过在retrying.retry装饰器中设置retry_on_exception参数,可以仅在引发特定异常时才引发重试。

更多关于retrying库的用法请访问官方文档。