Ir para o conteúdo do rodapé
AJUDA DO PYTHON

Repetindo funções com tenacidade em Python

Ao desenvolver programas robustos e resilientes na linguagem de programação Python, é comum ter que lidar de forma elegante com erros temporários, principalmente ao trabalhar com serviços externos ou operações de rede. É aqui que a poderosa biblioteca de repetição de propósito geral do Python, Tenacity, se torna útil. Os desenvolvedores podem aumentar a confiabilidade e a robustez de suas operações de geração de PDF combinando o Tenacity com o IronPDF, uma estrutura rica em recursos para a criação de documentos PDF em aplicativos Python.

O Tenacity oferece uma estrutura adaptável e personalizável para repetir tarefas que podem falhar ou gerar exceções devido a problemas transitórios, como falhas de rede, timeouts ou interrupções de serviço. O Tenacity simplifica o desenvolvimento da lógica de repetição com sua API amigável e conjunto abrangente de recursos, permitindo que os desenvolvedores se concentrem na criação de sistemas confiáveis ​​em vez de se preocuparem com falhas passageiras.

Neste artigo, vamos abordar as vantagens de integrar a biblioteca Tenacity com o IronPDF, apresentar exemplos práticos e oferecer dicas sobre como criar processos confiáveis ​​de geração de PDFs em aplicações Python. Os desenvolvedores podem melhorar a robustez e a confiabilidade de seus aplicativos, ao mesmo tempo que oferecem aos consumidores documentos PDF de alta qualidade, combinando o poder do Tenacity com o IronPDF.

Tentativa de repetição baseada em decorador

O Tenacity permite que os programadores usem decoradores do Python para adicionar lógica de repetição a funções ou métodos. Por isso, adicionar a possibilidade de repetir ações a determinadas ações sem alterar o código original é simples.

Planos de nova tentativa personalizáveis

O Tenacity oferece diversos parâmetros ajustáveis ​​para especificar planos de repetição. O número máximo de tentativas, o intervalo entre as tentativas e as circunstâncias em que as tentativas devem ocorrer são todos configuráveis ​​pelos desenvolvedores.

Recuo exponencial

A Tenacity defende o uso do recuo exponencial, uma técnica popular de invocação de novas tentativas na qual o intervalo entre as novas tentativas cresce exponencialmente com o número de tentativas em cada execução. Fazendo isso, você pode evitar sobrecarregar o serviço de destino com solicitações quando houver muito tráfego ou congestionamento.

Tremores e aleatoriedade

O Tenacity oferece opções para introduzir jitter e aleatoriedade nos atrasos de repetição, a fim de evitar problemas de sincronização e comportamentos de manada estrondosa. Isso diminui a possibilidade de vários clientes tentarem novamente ao mesmo tempo, distribuindo as tentativas ao longo do tempo.

Condições e exceções de repetição

Dependendo do valor de retorno da operação ou de quaisquer exceções geradas, os desenvolvedores podem criar condições de repetição exclusivas. Isso possibilita regular com precisão quando e em que condições as novas tentativas devem ser feitas.

Tempos limite e prazos

O Tenacity facilita a criação de tempos limite e prazos gerais para operações, garantindo que as tentativas de repetição não sejam feitas indefinidamente e que as operações sejam encerradas definitivamente se demorarem mais do que os limites predeterminados.

Integração com frameworks populares de Python

Flask, Django e Celery são apenas alguns dos frameworks com os quais o Tenacity interage facilmente. Isso facilita para os desenvolvedores adicionar lógica de repetição a operações em segundo plano, endpoints da web ou qualquer outra parte de seus sistemas.

Criar e configurar o Tenacity

Recuo exponencial

from tenacity import retry, wait_exponential

# Decorate the function with a retry mechanism
@retry(wait=wait_exponential(multiplier=1, min=1, max=10))
def my_function():
    # Your code logic here
    pass

# Explanation:
# - `multiplier`: Used to increase the interval between retries.
# - `min`: Minimum wait time in seconds between retries.
# - `max`: Maximum wait time allowed between retries.
from tenacity import retry, wait_exponential

# Decorate the function with a retry mechanism
@retry(wait=wait_exponential(multiplier=1, min=1, max=10))
def my_function():
    # Your code logic here
    pass

# Explanation:
# - `multiplier`: Used to increase the interval between retries.
# - `min`: Minimum wait time in seconds between retries.
# - `max`: Maximum wait time allowed between retries.
PYTHON

Oscilação aleatória

from tenacity import retry, wait_random

@retry(wait=wait_random(min=1, max=10))
def my_function():
    # Your code logic here
    pass

# Explanation:
# - `min`: Minimum random wait time in seconds between retries.
# - `max`: Maximum random wait time in seconds between retries.
from tenacity import retry, wait_random

@retry(wait=wait_random(min=1, max=10))
def my_function():
    # Your code logic here
    pass

# Explanation:
# - `min`: Minimum random wait time in seconds between retries.
# - `max`: Maximum random wait time in seconds between retries.
PYTHON

Personalizando as condições de repetição

Exceções Personalizar Tentativas

from tenacity import retry, retry_if_exception_type

# Retry on specific exceptions like ConnectionError
@retry(retry=retry_if_exception_type(ConnectionError))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Retry only if a ConnectionError exception is raised during the function execution.
from tenacity import retry, retry_if_exception_type

# Retry on specific exceptions like ConnectionError
@retry(retry=retry_if_exception_type(ConnectionError))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Retry only if a ConnectionError exception is raised during the function execution.
PYTHON

Tentar novamente com base no valor de retorno

from tenacity import retry, retry_if_result

@retry(retry=retry_if_result(lambda result: result is None))
def my_function():
    # Your code logic here
    return some_result

# Explanation:
# Retry if the function result is `None`.
from tenacity import retry, retry_if_result

@retry(retry=retry_if_result(lambda result: result is None))
def my_function():
    # Your code logic here
    return some_result

# Explanation:
# Retry if the function result is `None`.
PYTHON

Condições de parada

from tenacity import retry, stop_after_delay

@retry(stop=stop_after_delay(30))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Stop retrying after 30 seconds have elapsed since the first attempt.
from tenacity import retry, stop_after_delay

@retry(stop=stop_after_delay(30))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Stop retrying after 30 seconds have elapsed since the first attempt.
PYTHON

Repetir chamadas de retorno

from tenacity import retry, after_log
import logging

logger = logging.getLogger(__name__)

@retry(after=after_log(logger, logging.DEBUG))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Use a logger to log details of each retry attempt at the DEBUG level.
from tenacity import retry, after_log
import logging

logger = logging.getLogger(__name__)

@retry(after=after_log(logger, logging.DEBUG))
def my_function():
    # Your code logic here
    pass

# Explanation:
# Use a logger to log details of each retry attempt at the DEBUG level.
PYTHON

Começando

O que é o IronPDF?

Podemos criar, editar e renderizar documentos PDF dentro de programas com a ajuda do popular conjunto de ferramentas IronPDF. Trabalhe com PDFs de diversas maneiras: você pode converter páginas HTML em PDFs, adicionar texto, imagens e formas a PDFs já existentes e extrair texto e imagens de PDFs já existentes. É possível criar novas páginas PDF a partir de conteúdo HTML, imagens ou dados brutos.

O IronPDF é incrivelmente fácil de usar, o que é uma de suas principais vantagens. A API amigável do Python e sua extensa documentação facilitam o início da criação de PDFs a partir de projetos por parte dos desenvolvedores. O IronPDF também possui mais duas funcionalidades: velocidade e eficiência, que permitem aos desenvolvedores criar documentos PDF de alta qualidade rapidamente.

Algumas vantagens do IronPDF:

  • Transformar imagens, dados brutos e HTML em PDFs.
  • Remover imagens e texto de arquivos PDF.
  • Adicionando cabeçalhos, rodapés e marcas d'água a arquivos PDF.
  • Proteção de arquivos PDF com senhas e criptografia.
  • A capacidade de assinar e preencher formulários eletronicamente.

Instalar bibliotecas

Instalar as dependências necessárias e integrar ambas as bibliotecas ao seu fluxo de trabalho de geração de PDF são os primeiros passos para usar o Tenacity e o IronPDF juntos em uma aplicação Python.

pip install tenacity
pip install ironpdf
pip install tenacity
pip install ironpdf
SHELL

No seu script Python, importe os módulos necessários do Tenacity e do IronPDF:

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

# Set up retry behavior on the PDF generating function
@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()
    # Render the HTML content as a PDF
    iron_pdf.render_html_as_pdf(html_content)
    # Save the generated PDF to a file
    iron_pdf.save_as_pdf("output.pdf")

# Explanation:
# - `@retry(stop=stop_after_attempt(3))`: Stop after 3 failed attempts.
# - `wait_fixed(2)`: Wait 2 seconds before each retry attempt.
from tenacity import retry, stop_after_attempt, wait_fixed
from IronPdf import IronPdf

# Set up retry behavior on the PDF generating function
@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()
    # Render the HTML content as a PDF
    iron_pdf.render_html_as_pdf(html_content)
    # Save the generated PDF to a file
    iron_pdf.save_as_pdf("output.pdf")

# Explanation:
# - `@retry(stop=stop_after_attempt(3))`: Stop after 3 failed attempts.
# - `wait_fixed(2)`: Wait 2 seconds before each retry attempt.
PYTHON

Chame sua função para criar PDFs e passe o texto HTML como argumento. Caso ocorra uma exceção, o Tenacity tentará novamente a função automaticamente, de acordo com os parâmetros de repetição predefinidos.

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)

# Explanation:
# Attempt to generate a PDF and handle any exceptions that might occur during the process.
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)

# Explanation:
# Attempt to generate a PDF and handle any exceptions that might occur during the process.
PYTHON

Ao modificar fatores como o número de tentativas, a condição de nova tentativa e a condição de espera, o intervalo entre as tentativas e as circunstâncias em que as novas tentativas devem ocorrer, você pode alterar ainda mais o comportamento de repetição. O Tenacity inclui diferentes métodos de repetição e estratégias de repetição e condição de espera que você pode usar para ajustar o comportamento de repetição de acordo com suas necessidades.

Exemplo de saída

Abaixo está o resultado gerado pelo código acima:

Tenacity Python (Como funciona para desenvolvedores): Figura 1 - Resultado esperado retornado, tentativa de saída em PDF

Conclusão

Em resumo, o Tenacity e o IronPDF juntos fornecem uma solução poderosa para a criação de fluxos de trabalho robustos e confiáveis ​​de geração de PDFs em aplicações Python. Os desenvolvedores podem garantir que seus processos de geração de PDF sejam robustos e resilientes a falhas temporárias e novas tentativas, utilizando os poderosos recursos de geração de PDF do IronPDF e a lógica de repetição personalizável do Tenacity.

Com o extenso conjunto de recursos do Tenacity, os desenvolvedores podem ajustar com precisão as táticas de repetição para várias condições, especificar critérios exclusivos de repetição, personalizar as repetições em caso de exceções e incluir opções de configuração sofisticadas. O Tenacity permite que os desenvolvedores lidem de forma eficiente com falhas momentâneas, como interrupções de rede ou de serviço, e garante que os processos cruciais de criação de PDFs sejam repetidos imediatamente.

Em conclusão, os desenvolvedores podem criar soluções de produção de PDF confiáveis ​​e robustas, capazes de lidar com as exigências de ambientes reais, utilizando o Tenacity com o IronPDF. Essa combinação oferece uma base sólida para a criação de fluxos de trabalho de geração de PDFs confiáveis ​​e escaláveis ​​em aplicações Python, independentemente de o fluxo de trabalho ser para produzir faturas, relatórios ou documentos.

Uma licença vitalícia do IronPDF está incluída no pacote por um preço razoável. Para muitos sistemas, o pacote está disponível por um preço muito acessível $799. Os titulares da licença têm acesso a suporte técnico online 24 horas por dia. Por favor, visite a página de licenciamento para obter detalhes adicionais sobre a taxa. Para saber mais sobre os produtos da Iron Software, acesse a página da biblioteca.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim