Nouvelles tentatives avec temporisation exponentielle
Utilisez tenacity pour retenter les opérations en échec temporaire avec des délais croissants de manière exponentielle et une variation aléatoire.
Nouvelles tentatives avec temporisation exponentielle est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi effectuer des nouvelles tentatives ?
Les appels externes (LLM, API de recherche, bases de données vectorielles) échouent de manière transitoire. Une simple nouvelle tentative permet de récupérer après la plupart des erreurs intermittentes sans déranger l’utilisateur.
Ce qu’il ne faut NOT faire
N’effectuez pas de nouvelle tentative instantanément dans une boucle serrée : vous martèlerez le service et le limiteur de débit vous bloquera :
# BAD
for _ in range(10):
try:
return call_api()
except Exception:
passTemporisation exponentielle
Attendez plus longtemps après chaque échec. La puissance de 2 est la convention :
import time
def call_with_backoff(fn, attempts=5):
for i in range(attempts):
try:
return fn()
except TransientError:
if i == attempts - 1:
raise
time.sleep(2 ** i) # 1, 2, 4, 8, 16 secondsAjouter une variation aléatoire
Sans variation aléatoire, les nouvelles tentatives de nombreux clients s’alignent, ce qui crée un trafic massif simultané. Ajoutez un décalage aléatoire :
import random
sleep = (2 ** i) + random.uniform(0, 1)
time.sleep(sleep)Utiliser Tenacity
La bibliothèque tenacity implémente cela pour vous :
from tenacity import retry, wait_exponential_jitter, stop_after_attempt, retry_if_exception_type
import requests
@retry(
wait=wait_exponential_jitter(initial=1, max=30),
stop=stop_after_attempt(5),
retry=retry_if_exception_type((requests.Timeout, requests.ConnectionError))
)
def search(query):
return requests.get('https://api.tavily.com/search', timeout=10).json()Réessayer uniquement les erreurs transitoires
N’effectuez jamais de nouvelle tentative pour :
- les erreurs 4xx (requête incorrecte — une nouvelle tentative n’aidera pas)
- les échecs d’authentification
- les erreurs de validation
Effectuez une nouvelle tentative pour :
- les dépassements de délai
- les erreurs serveur 5xx
- les limites de débit (avec des attentes plus longues)
Nouvelles tentatives sensibles aux limites de débit
Respectez l’en-tête Retry-After :
if response.status_code == 429:
wait = int(response.headers.get('Retry-After', 5))
time.sleep(wait)
continueLimiter la durée totale des nouvelles tentatives
Limitez la durée totale des nouvelles tentatives — généralement à 30 à 60 secondes pour un appel destiné à l’utilisateur :
from tenacity import stop_after_delay
@retry(
wait=wait_exponential_jitter(initial=1, max=10),
stop=stop_after_delay(60)
)
def call_api():
...En-têtes d’idempotence
Pour les API non idempotentes (Stripe, etc.), incluez une clé d’idempotence à chaque nouvelle tentative afin de regrouper les doublons :
headers = {'Idempotency-Key': f'agent-call-{run_id}-{tool_id}'}Réessayer aussi l’appel au LLM
Les SDK OpenAI et Anthropic effectuent automatiquement 1 à 2 nouvelles tentatives. Vous pouvez configurer :
client = OpenAI(max_retries=5, timeout=30.0)Nouvelles tentatives asynchrones
Pour le code asynchrone :
from tenacity import AsyncRetrying
async for attempt in AsyncRetrying(wait=wait_exponential_jitter(), stop=stop_after_attempt(5)):
with attempt:
result = await call_api()Journaliser les nouvelles tentatives
Chaque nouvelle tentative doit journaliser : le numéro de tentative, la durée de la pause et la raison de l’erreur. Sinon, il est impossible de déboguer la question « pourquoi est-ce si lent ? ».
Nouvelles tentatives ou délais d’attente
Définissez un délai d’attente court pour chaque tentative (par exemple 10 s) et une limite totale avec stop_after_delay (par exemple 60 s). Sans ces deux limites, une connexion bloquée peut rester suspendue indéfiniment.
Pourquoi une variation aléatoire ?
Pourquoi ajouter une variation aléatoire aux délais entre les nouvelles tentatives ?
Récapitulatif
Temporisation exponentielle + variation aléatoire + durée totale limitée + nouvelles tentatives uniquement pour les erreurs transitoires. Utilisez tenacity pour éviter le code répétitif.
Apprends AI Agents avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 60
- Leçons
- 239
Questions Fréquemment Posées
La leçon « Nouvelles tentatives avec temporisation exponentielle » est-elle gratuite ?
Oui — le texte complet de « Nouvelles tentatives avec temporisation exponentielle » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Nouvelles tentatives avec temporisation exponentielle » ?
Utilisez tenacity pour retenter les opérations en échec temporaire avec des délais croissants de manière exponentielle et une variation aléatoire. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Nouvelles tentatives avec temporisation exponentielle » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Outils idempotents et effets de bord
- Nouvelles tentatives avec temporisation exponentielle
- Délais d’expiration et disjoncteurs
- Valider les sorties des outils (Pydantic)