AIDE PYTHON

Réessayer des fonctions avec ténacité en Python

Publié juillet 1, 2024
Partager:

Lorsque l'on développe des programmes solides et résilients dans le langage de programmation Python, il est courant de devoir gérer gracieusement des erreurs temporaires, en particulier lorsqu'on travaille avec des services externes ou des opérations de réseau. C'est là que la puissante bibliothèque Python de réessais à usage général, Tenacity, se révèle utile. Les développeurs peuvent accroître la fiabilité et la robustesse de leurs opérations de génération de PDF en combinant Tenacity avec IronPDF, un cadre riche en fonctionnalités pour la création de documents PDF dans les applications Python.

Tenacity offre une structure adaptable et personnalisable pour relancer les tâches qui peuvent échouer ou soulever des exceptions en raison de problèmes transitoires tels que les dysfonctionnements du réseau, les dépassements de délai ou les interruptions de service. Tenacity simplifie le développement de la logique de réessai grâce à son API conviviale et à son vaste ensemble de fonctionnalités, ce qui permet aux développeurs de se concentrer sur la création de systèmes fiables plutôt que de se préoccuper de défaillances passagères.

Dans ce billet, nous allons passer en revue les avantages de l'intégration de la bibliothèque Tenacity avec IronPDF, présenter des exemples pratiques et donner des conseils sur la façon de créer des processus fiables de génération de PDF dans les applications Python. Les développeurs peuvent améliorer la robustesse et la fiabilité de leurs applications tout en fournissant aux consommateurs des documents PDF de haute qualité en combinant la puissance de Tenacity avec IronPDF.

Réessai basé sur un décorateur

Python permet aux programmeurs d'utiliser des décorateurs Python pour ajouter une logique de réessai aux fonctions ou aux méthodes. De ce fait, il est facile d'ajouter un comportement de réessai à des actions particulières sans modifier le code original.

Plans de réessai personnalisables

Tenacity propose plusieurs paramètres ajustables pour spécifier les plans de relance. Le nombre maximum de tentatives, l'intervalle entre les tentatives et les circonstances dans lesquelles les tentatives doivent avoir lieu sont tous personnalisables par les développeurs.

Retard exponentiel

Tenacity est en faveur du backoff exponentiel, une technique courante d'invocation de tentatives dans laquelle l'intervalle entre les tentatives croît de manière exponentielle avec le nombre de tentatives à chaque essai. Vous éviterez ainsi d'inonder le service cible de requêtes en cas de trafic important ou de congestion.

Gigue et aléa

Tenacity propose des options pour introduire de la gigue et du hasard dans les délais de réessai afin d'éviter les problèmes de synchronisation et de troupeau tonnant. Cela réduit la possibilité que plusieurs clients fassent une nouvelle tentative en même temps en répartissant les efforts de relance dans le temps.

Conditions de réessai et exceptions

En fonction de la valeur de retour de l'opération ou des exceptions soulevées, les développeurs peuvent créer des conditions de réessai uniques. Il est ainsi possible de déterminer avec précision quand et dans quelles conditions les tentatives doivent être effectuées.

Délais et échéances

Tenacity facilite la création de délais et d'échéances pour les opérations générales, garantissant que les tentatives de relance ne sont pas effectuées indéfiniment et que les opérations sont finalement interrompues si elles durent plus longtemps que les seuils prédéterminés.

Intégration avec les frameworks Python les plus répandus

Flask, Django et Celery ne sont que quelques-uns des cadres avec lesquels Tenacity interagit facilement. Les développeurs peuvent ainsi facilement ajouter une logique de réessai aux opérations d'arrière-plan, aux points de terminaison Web ou à toute autre partie de leurs systèmes.

Créer et configurer Tenacity

Retard exponentiel

from tenacity import wait_exponential

# Exponential backoff sleeping
@retry(wait=wait_exponential(multiplier=1, min=1, max=10))
def my_function():
    ...
PYTHON
  • multiplier : Pour allonger l'intervalle entre les tentatives, utilisez le multiplicateur exponentiel.
  • min : Le temps le plus court entre deux essais.
  • max : L'intervalle le plus long entre le nombre de tentatives effectuées.

Gigue aléatoire

from tenacity import wait_random

@retry(wait=wait_random(min=1, max=10))
def my_function():
    ...
PYTHON
  • min : La plus petite limite arbitraire par le nombre d'intervalles entre les essais.
  • max : La plus grande limite arbitraire par le nombre d'intervalles entre le nombre de tentatives effectuées.

Personnalisation des conditions de réessai

Exceptions Personnaliser la relance

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

N'effectuer une nouvelle tentative que si le type d'exception soulevée(dans ce cas, ConnectionError (erreur de connexion)) reçoit un message d'erreur.

Réessai en fonction de la valeur de retour

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

Ne réessayez que si la méthode renvoie None.

Conditions d'arrêt

from tenacity import stop_after_delay

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

Après un temps prédéterminé(par exemple, 30 secondes)arrêtez d'essayer.

Rappels de réessai

from tenacity import after_log

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

L'attribut de réessai attaché à la fonction et ses tentatives doivent être enregistrés à l'aide d'un enregistreur désigné(comme un logger) et de relever un niveau d'enregistrement spécifique(comme DEBUG).

Pour commencer

Qu'est-ce qu'IronPDF ?

Nous pouvons créer, éditer et rendre des documents PDF à l'intérieur de programmes à l'aide de la célèbre boîte à outils IronPDF. Vous pouvez travailler avec des PDF de différentes manières : vous pouvez convertir des pages HTML en PDF, ajouter du texte, des images et des formes à des pages existantes, et extraire du texte et des images de pages existantes. Même à partir de contenu HTML, d'images ou de données brutes, vous pouvez créer de nouvelles pages PDF.

IronPDF est incroyablement facile à utiliser, ce qui est l'un de ses principaux avantages. Grâce à l'API conviviale de Python et à sa documentation complète, les développeurs peuvent facilement commencer à créer des PDF à partir de leurs projets. IronPDF possède également deux autres fonctionnalités : la vitesse et l'efficacité, qui permettent aux développeurs de créer rapidement des documents PDF de haute qualité.

Quelques avantages d'IronPDF :

  • Transformation d'images, de données brutes et de HTML en PDF.
  • Suppression des images et du texte des fichiers PDF.
  • Ajout d'en-têtes, de pieds de page et de filigranes aux fichiers PDF.
  • Protection des fichiers PDF par mots de passe et cryptage.
  • La capacité de signer et de remplir des formulaires par voie électronique.

Installer les bibliothèques

L'installation des dépendances requises et l'intégration des deux bibliothèques dans votre flux de production de PDF sont les premières étapes de l'utilisation conjointe de Tenacity et IronPDF dans une application Python.

pip install tenacity
pip install ironpdf

Dans votre script Python, importez les modules requis de Tenacity et IronPDF for Python :

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

Utilisez le décorateur Tenacity @retry pour orner votre méthode de génération de PDF et définir le comportement du retry, par exemple retry forever :

@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)) : Indique qu'après trois tentatives, la fonction doit cesser d'essayer de réitérer l'appel. wait_fixed(2) : Indique qu'il doit y avoir une pause de 2 secondes entre chaque tentative de nouvel appel.

Appelez votre fonction de création de PDF et transmettez-lui le texte HTML. En cas d'exception, Tenacity réessaie automatiquement la fonction conformément aux paramètres de réessai prédéfinis.

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

En modifiant des facteurs tels que le nombre de tentatives, la condition de tentative et la condition d'attente, l'intervalle entre les tentatives et les circonstances dans lesquelles les tentatives doivent avoir lieu, vous pouvez encore modifier le comportement des tentatives. Tenacity comprend différentes méthodes de relance et stratégies de relance et de condition d'attente que vous pouvez utiliser pour affiner le comportement de la relance en fonction de vos besoins.

Exemple de sortie

Voici le résultat généré par le code ci-dessus :

Python de la ténacité(Comment ça marche pour les développeurs) : Figure 1 - Résultat attendu du retour de la tentative de sortie du PDF

Conclusion

En résumé, Tenacity et IronPDF constituent ensemble une solution puissante pour créer des flux de production de PDF robustes et fiables dans les applications Python. Les développeurs peuvent s'assurer que leurs processus de génération de PDF sont robustes et résistent aux défaillances temporaires et aux tentatives de réessai en utilisant les puissantes capacités de génération de PDF d'IronPDF et la logique de réessai personnalisable de Tenacity.

Grâce à l'ensemble des fonctionnalités de Tenacity, les développeurs peuvent ajuster avec précision les tactiques de relance pour des conditions multiples, spécifier des critères de relance uniques, personnaliser les relances en cas d'exception et inclure des options de configuration sophistiquées. Tenacity permet aux développeurs de gérer avec élégance les défaillances momentanées, telles que les pannes de réseau ou les interruptions de service, et garantit que les processus cruciaux de création de PDF sont immédiatement relancés.

En conclusion, les développeurs peuvent créer des solutions de production PDF fiables et robustes, capables de faire face aux rigueurs du monde réel, en utilisant Tenacity avec IronPDF. Cette combinaison offre une base solide pour créer des flux de production PDF fiables et évolutifs dans les applications Python, qu'il s'agisse de produire des factures, des rapports ou des documents.

Une licence à vie pour IronPDF est incluse dans le package pour un prix raisonnable. Pour de nombreux systèmes, l'ensemble est disponible à un prix très abordable de 749 $. Les détenteurs de licences bénéficient d'un accès 24 heures sur 24 à une assistance technique en ligne. Veuillez consulter la page relative à l'octroi de licences pour obtenir de plus amples informations sur la redevance. Pour en savoir plus sur les produits d'Iron Software, consultez la page de la bibliothèque.

< PRÉCÉDENT
OpenTelemetry dans les applications Python
SUIVANT >
Web Scraping avec BeautifulSoup en Python

Prêt à commencer ? Version : 2024.11.1 vient de paraître

Installation gratuite de pip Voir les licences > ;