python tenacity详细用法

bluesky1年前 ⋅ 1502 阅读
1. Tenacity是什么?

Tenacity是一个Python库,它用于在请求失败时重试请求。它可以用于处理网络请求、数据库重连等情况。

2. 安装Tenacity

Tenacity可以通过pip安装。在终端命令行中执行以下命令:

```
pip install tenacity
```

3. 使用Tenacity

Tenacity非常易于使用。以下是一个重试网络请求的示例:

```python
from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(3), wait=wait_fixed(1))
def make_network_request():
    response = requests.get('http://example.com')
    response.raise_for_status()
    return response.text
```

在上面的示例中,make_network_request函数将执行3次(stop_after_attempt),每次失败后等待1秒钟(wait_fixed),尝试连接http://example.com,并在每次失败时重试。

4. Tenacity多种重复方式

Tenacity提供了许多不同的重试方式,并且可以通过参数轻松配置:

```python
from tenacity import retry, stop_after_delay, wait_random_exponential

@retry(stop=stop_after_delay(10), wait=wait_random_exponential(max=60))
def make_network_request():
    response = requests.get('http://example.com')
    response.raise_for_status()
    return response.text
```

在代码中,make_network_request函数仅限于在10秒内完成,等待时间会随着重试次数增加而增加,最多不超过60秒。

5. Tenacity其他参数

Tenacity提供了诸如reraise和retries等其他常见的重试参数。

reraise参数可以配置是否在所有重试失败后重新引发原始异常:

```python
from tenacity import retry, stop_after_attempt, retry_if_exception_type, reraise

@retry(stop=stop_after_attempt(3), retry_error_callback=reraise, retry=retry_if_exception_type(ConnectionError))
def make_network_request():
    response = requests.get('http://example.com')
    response.raise_for_status()
    return response.text
```

在上面的示例中,如果发生连接错误,则该函数将重试3次,最后一个重试失败后将重新引发ConnectionError异常。

6. Tenacity高级用法

Tenacity还提供了与自定义装饰器或上下文管理器等高级用法相关的功能。

```python
from tenacity import retry, before_log, before_sleep_log, before_retry

@retry(before=before_log(logger, logging.WARNING), before_sleep=before_sleep_log(logger, logging.WARNING), before_retry=before_retry_log(logger, logging.WARNING))
def make_network_request():
    response = requests.get('http://example.com')
    response.raise_for_status()
    return response.text
```

在这个例子中,通过在我们自己的日记文件中记录一些额外的信息(例如在每次重试之前记录消息,或者在延迟之前记录消息)来改善Tenacity的输出,以便我们了解哪些重试失败了。 

7. 总结

Tenacity非常有用,使Python开发人员能够轻松地使用重试模式来优雅地处理各种失败场景。在快速失败时,它可以减少关于网络异常的噪音,而在慢速故障时,它还可以在尝试时节省网络带宽。任何需要处理网络失败的Python应用程序都可以从使用Tenacity受益。

全部评论: 0

    相关推荐