PYTHON帮助

用 Python 中的顽强重试函数

发布 2024年七月1日
分享:

在使用 Python 编程语言开发强大而有弹性的程序时,经常需要优雅地处理临时错误,尤其是在使用外部服务或网络操作时。 这时,强大的 Python 通用重试库 Tenacity 就派上了用场。 开发人员可以通过将 Tenacity 与 IronPDF(一个用于在 Python 应用程序中创建 PDF 文档的功能丰富的框架)相结合来提高其 PDF 生成操作的可靠性和健壮性。

由于网络故障、超时或服务中断等瞬时问题,重试任务可能不成功或出现异常,Tenacity 为重试任务提供了一种可调整和可定制的结构。Tenacity 利用其用户友好的 API 和广泛的功能集简化了重试逻辑的开发,使开发人员能够专注于创建可靠的系统,而不必担心稍纵即逝的故障。

在本篇文章中,我们将详细介绍将 Tenacity 库与 IronPDF 集成的优势,介绍实际示例,并就如何在 Python 应用程序中创建可靠的 PDF 生成流程提供建议。 通过将 Tenacity 与 IronPDF 的强大功能相结合,开发人员可以提高其应用程序的稳健性和可靠性,同时为消费者提供高质量的 PDF 文档。

基于装饰器的重试

Tenacity 使程序员能够使用 Python 装饰器为函数或方法添加重试逻辑。 因此,在不更改原始代码的情况下为特定操作添加重试行为是非常简单的。

量身定制的重试计划

Tenacity 提供多个可调参数来指定重试计划。 重试的最大次数、重试的间隔时间以及重试的情况都可以由开发人员自定义。

指数后退

Tenacity 支持指数后退,这是一种当前流行的重试调用技术,重试的间隔时间随着每次尝试的次数呈指数增长。 这样做可以避免目标服务在流量大或拥堵时被大量请求淹没。

抖动和随机性

Tenacity 为重试延迟提供了引入抖动和随机性的选项,以防止同步问题和雷群问题。 这样可以通过分散重试时间,减少多个客户同时重试的可能性。

重试条件和异常

根据操作的返回值或任何引发的异常,开发人员可以创建独特的重试条件。 这样就可以精确规定何时以及在何种情况下应进行重试。

超时和截止日期

Tenacity 可帮助创建一般操作超时和最后期限,确保不会无限制地尝试重试,并在操作时间超过预定阈值时最终终止操作。

与流行的 Python 框架集成

Flask、Django 和 Celery 只是 Tenacity 可以轻松与之交互的几个框架。 这样,开发人员就可以轻松地将重试逻辑添加到后台操作、网络端点或系统的任何其他部分。

创建和配置 Tenacity

指数后退

from tenacity import wait_exponential

# Exponential backoff sleeping
@retry(wait=wait_exponential(multiplier=1, min=1, max=10))
def my_function():
    ...
PYTHON
  • 乘法器:用于延长重试间隔,使用指数乘数。
  • 分钟两次试验之间的最短时间。
  • max:尝试次数之间的最长间隔。

随机抖动

from tenacity import wait_random

@retry(wait=wait_random(min=1, max=10))
def my_function():
    ...
PYTHON
  • min:试验间隔数的最小任意限制。
  • max:由尝试次数之间的间隔数任意限制的最大值。

自定义重试条件

例外情况 自定义重试

from tenacity import retry_if_exception_type

# Coroutines retry code block, exceptions customize retrying
@retry(retry=retry_if_exception_type(ConnectionError))
def my_function():
    ...
PYTHON

只有在出现的异常类型为(在这种情况下,"ConnectionError)则会出现错误信息。

根据返回值重试

from tenacity import retry_if_result

# Retry forever ignoring exceptions code block
@retry(retry=retry_if_result(lambda result: result is None))
def my_function():
    ...
PYTHON

只有在方法返回 "无 "的情况下才会重试。

停止条件

from tenacity import stop_after_delay

@retry(stop=stop_after_delay(30))
def my_function():
    ...
PYTHON

预定时间后(例如,30 秒)不要再尝试了。

重试回调

from tenacity import after_log

# Custom callbacks
@retry(after=after_log(logger, logging.DEBUG))
def my_function():
    ...
PYTHON

应使用指定的日志记录器记录附加在函数上的重试属性及其尝试。(像 "日志 "一样)并提高特定的日志级别(如 DEBUG).

入门

什么是IronPDF?

借助流行的工具包 IronPDF,我们可以在程序内部创建、编辑和渲染 PDF 文档。 使用 PDF 的方式多种多样:您可以将 HTML 页面转换为 PDF,在已有的 PDF 中添加文本、图像和形状,以及从已有的 PDF 中提取文本和图像。即使是 HTML 内容、图像或原始数据,您也可以创建新的 PDF 页面。

IronPdf 非常容易使用,这是它的主要优势之一。 Python 的用户友好 API 和丰富的文档使开发人员能够轻松地在其项目中开始创建 PDF。 IronPdf 还有两个特点:速度和效率,可以让开发人员快速创建高质量的 PDF 文档。

IronPDF 的几个优点:

  • 将图像、原始数据和 HTML 转换成 PDF。
  • 删除 PDF 文件中的图像和文本。
  • 为 PDF 文件添加页眉、页脚和水印。
  • 使用密码和加密技术保护 PDF 文件。
  • 电子签名和填写表格的能力。

安装库

安装所需的依赖关系并将这两个库集成到您的 PDF 生成工作流中,是在 Python 应用程序中同时使用 Tenacity 和 IronPDF 的第一步。

pip install tenacity
pip install ironpdf

在 Python 脚本中,从 Tenacity 和 IronPDF 中导入所需的模块:

from tenacity import retry, stop_after_attempt, wait_fixed
from IronPdf import IronPdf
PYTHON

使用 Tenacity @retry 装饰器装饰您的 PDF 生成方法,并设置重试行为,如永远重试:

@retry(
    stop=stop_after_attempt(3),   # Stop retrying after 3 attempts
    wait=wait_fixed(2)            # Wait 2 seconds between retry attempts
)
def generate_pdf(html_content):
    iron_pdf = IronPdf()
    iron_pdf.render_html_as_pdf(html_content)
    iron_pdf.save_as_pdf("output.pdf")
PYTHON

@retry(stop=stop_after_attempt(3)):表示尝试三次后,函数应停止再次尝试调用。 wait_fixed(2):表示每次重试呼叫尝试之间应停顿 2 秒钟。

调用创建 PDF 的函数,并将 HTML 文本传递给它。 如果出现异常,Tenacity 将根据预设的重试参数自动重试函数。

try:
    html_content = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
    generate_pdf(html_content)
    print("PDF generated successfully")
except Exception as e:
    print("Failed to generate PDF:", e)
PYTHON

通过修改重试次数、重试条件和等待条件、重试间隔以及重试发生的环境等因素,您可以进一步改变重试行为。 Tenacity 包括不同的重试方法以及重试和等待条件策略,您可以根据自己的要求对重试行为进行微调。

输出样本

以下是上述代码生成的输出结果:

Tenacity Python(如何为开发人员工作):图 1 - 预期返回结果重试 PDF 输出

结论

总之,Tenacity 和 IronPDF 共同为在 Python 应用程序中创建稳健可靠的 PDF 生成工作流提供了强有力的解决方案。 开发人员可利用 IronPDF 强大的 PDF 生成功能和 Tenacity 可定制的重试逻辑,确保其 PDF 生成流程稳健且能抵御临时故障和重试。

利用 Tenacity 的广泛功能集,开发人员可以针对多种条件精确调整重试策略,指定独特的重试标准,自定义异常重试,并包含复杂的配置选项。 Tenacity 允许开发人员从容应对瞬间故障,如网络中断或服务中断,并保证重要的 PDF 创建流程立即重试。

总之,开发人员可以通过使用 IronPDF 的 Tenacity 创建可靠、强大的 PDF 生产解决方案,以应对现实世界中的各种严酷环境。 这种组合为在 Python 应用程序中创建可靠、可扩展的 PDF 生成工作流奠定了坚实的基础,无论该工作流是用于制作发票、报告还是文档。

软件包中包含 IronPdf 的终身许可证,收费合理。 对于许多系统而言,该软件包的价格非常实惠,仅需 749 美元。许可证持有者可获得 24 小时在线工程支持。 请访问许可页面获取更多收费详情。 要了解有关 Iron Software 产品的更多信息,请访问资料库页面。

< 前一页
Python 应用程序中的 OpenTelemetry
下一步 >
使用 Python 中的 BeautifulSoup 进行网络抓取

准备开始了吗? 版本: 2024.11.1 刚刚发布

免费 pip 安装 查看许可证 >