Maison >développement back-end >Tutoriel Python >Jusqu'à ce que la bibliothèque « requests » prenne en charge les tentatives automatiques avec un intervalle exponentiel

Jusqu'à ce que la bibliothèque « requests » prenne en charge les tentatives automatiques avec un intervalle exponentiel

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 15:00:15341parcourir

TIL that the `requests` library supports automatic retries with exponential backoff

Vous pouvez utiliser un adaptateur personnalisé et forcer plusieurs tentatives avec un facteur d'attente exponentiel sur toutes les requêtes HTTP/HTTPS. Voir exemple ci-dessous :

import requests
from requests import adapters
from urllib3.util import Retry

# Create a transport adapter with a custom retry strategy.
retries = Retry(
    total=3,
    backoff_factor=3,
    status_forcelist=[500, 502, 503, 504]
)
adapter = adapters.HTTPAdapter(max_retries=retries)

# Ensure adapter is used for both HTTP and HTTPS requests.
session = requests.Session()
session.mount('https://', adapter)
session.mount('http://', adapter)

# Testing the retry mechanism
response = session.get("http://httpbin.org/status/500")

Cela renvoie l'erreur ci-dessous :

RetryError: HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /status/500 (Caused by ResponseError('too many 500 error responses'))

Le malheur est qu'il ne semble pas y avoir de moyen de savoir combien de fois le mécanisme ci-dessus a tenté de réessayer, seulement lorsque toutes les tentatives ont été épuisées

Référence

https://stackoverflow.com/a/47475019/4477547

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn