\n\n\n\n Cómo implementar la lógica de reintentos con PydanticAI (Paso a Paso) - AgntBox Cómo implementar la lógica de reintentos con PydanticAI (Paso a Paso) - AgntBox \n

Cómo implementar la lógica de reintentos con PydanticAI (Paso a Paso)

📖 7 min read1,295 wordsUpdated Mar 26, 2026

Implementando la Lógica de Reintento con PydanticAI: Un Tutorial Paso a Paso

Estamos construyendo un servicio de obtención de datos confiable que maneja interrupciones de red como un profesional, porque nadie quiere que su aplicación se bloquee por un simple tiempo de espera.

Requisitos Previos

  • Python 3.11+
  • pip install pydantic-ai
  • Conocimientos básicos de modelos de Pydantic
  • Conocimiento de bibliotecas para solicitudes de red (como requests o httpx)

Paso 1: Configurando Tu Entorno

Antes de implementar la lógica de reintento, necesitamos configurar nuestro entorno de desarrollo. Esto implicará instalar el paquete PydanticAI y asegurarnos de tener todas las bibliotecas necesarias.


# Prepara tu entorno de Python
# Instala las bibliotecas pydantic-ai y httpx
!pip install pydantic-ai httpx

Este comando instala PydanticAI junto con httpx, que es crucial para realizar solicitudes HTTP. Elegí httpx en lugar de requests debido a su soporte nativo para operaciones asíncronas, lo cual es una gran ventaja para el rendimiento. Ahora, si vienes de un entorno de requests, prepárate para una ligera curva de aprendizaje, pero confía en mí, vale la pena.

Paso 2: Creando un Modelo Básico de Pydantic

Con el entorno listo, vamos a crear nuestro primer modelo de Pydantic. Un modelo en Pydantic define el esquema para tus datos; es como un plano. Vamos a crear uno que maneje una respuesta de API simulada.


from pydantic import BaseModel

class ApiResponseModel(BaseModel):
 status: str
 data: dict

Este modelo tiene dos campos: status y data. El campo status indica si la solicitud fue exitosa, y data contiene la carga útil de la respuesta. La parte ingeniosa aquí es que Pydantic validará la estructura de la respuesta de la API en función de este modelo.

Paso 3: Implementando la Lógica de Solicitud HTTP

Ahora, vamos a crear una función para hacer una solicitud HTTP. Usaremos Pydantic para validar la respuesta. Aquí está lo interesante: vamos a agregar lógica de reintento, así que si nuestra solicitud falla, podemos intentarlo de nuevo en lugar de hacer un berrinche.


import httpx
import time

async def fetch_data(url: str) -> ApiResponseModel:
 async with httpx.AsyncClient() as client:
 response = await client.get(url)
 response.raise_for_status()
 return ApiResponseModel(**response.json())

Este código obtiene datos de la URL especificada. Si falla, necesitamos implementar la lógica de reintento. Nadie quiere lidiar con errores HTTP en producción, ¿verdad?

Paso 4: Agregando Lógica de Reintento

Es hora de agregar esa lógica de reintento tan importante. Vamos a implementar un mecanismo simple para reintentar la solicitud un número específico de veces antes de finalmente rendirnos.


async def fetch_with_retries(url: str, retries: int = 3, delay: int = 2) -> ApiResponseModel:
 for i in range(retries):
 try:
 return await fetch_data(url)
 except httpx.HTTPStatusError as e:
 print(f"El intento {i + 1} falló: {e}. Reintentando...")
 time.sleep(delay) # Espera antes de reintentar
 except Exception as e:
 print(f"Error inesperado: {e}. Reintentando...")
 time.sleep(delay)
 raise Exception(f"Falló al obtener datos después de {retries} intentos.")

En esta función, estamos tomando un parámetro opcional retries para permitirnos especificar cuántas veces intentar la solicitud antes de rendirnos. También tenemos un parámetro delay, así que si nuestra solicitud falla, pausamos durante un par de segundos en lugar de bombardear al servidor con solicitudes.

Los Detalles Importantes

Hasta ahora, todo bien, pero aquí hay algunas trampas en las que he caído una y otra vez que pueden tropezarte en producción:

  • Retardo Exponencial: Es crucial para evitar abrumar al servidor después de un fallo. Asegúrate de aumentar el retraso cada vez que reintentes. Los retrasos estáticos simples no serán suficientes cuando el sistema comience a abrumar al servidor.
  • Manejo de Diferentes Excepciones: Puede que desees reintentar solo por problemas transitorios. No todas las excepciones justifican un reintento, así que refina tu manejo de excepciones para atrapar errores específicos.
  • Registro de Fallos: No olvides registrar detalles sobre los fallos. Es un salvavidas para diagnosticar problemas más tarde.
  • Manejadores de Contexto Asíncronos: Si estás mezclando código síncrono y asíncrono, ten cuidado con los manejadores de contexto. No funcionan de la misma manera, y puede llevar a errores desagradables.
  • Latencia de Red: Ten en cuenta que la latencia de red puede afectar significativamente tus reintentos. Prueba bajo diferentes condiciones para estructurar tu lógica alrededor de escenarios realistas.

Ejemplo Completo de Código

Aquí tienes una versión completa de lo que hemos construido, completamente operativa. Esto hará que sea fácil para ti copiarlo y usarlo de inmediato. Solo reemplaza YOUR_API_URL_HERE con tu punto final objetivo.


import httpx
import time
from pydantic import BaseModel

class ApiResponseModel(BaseModel):
 status: str
 data: dict

async def fetch_data(url: str) -> ApiResponseModel:
 async with httpx.AsyncClient() as client:
 response = await client.get(url)
 response.raise_for_status()
 return ApiResponseModel(**response.json())

async def fetch_with_retries(url: str, retries: int = 3, delay: int = 2) -> ApiResponseModel:
 for i in range(retries):
 try:
 return await fetch_data(url)
 except httpx.HTTPStatusError as e:
 print(f"El intento {i + 1} falló: {e}. Reintentando...")
 time.sleep(delay)
 except Exception as e:
 print(f"Error inesperado: {e}. Reintentando...")
 time.sleep(delay)
 raise Exception(f"Falló al obtener datos después de {retries} intentos.")

# Ejemplo de Uso
# Asegúrate de que esto se ejecute en un contexto asíncrono, como asyncio.run()
url = "YOUR_API_URL_HERE"
data = await fetch_with_retries(url)
print(data)

¿Qué Sigue?

¿Tu próximo movimiento? Experimenta agregando registros personalizados y métricas a tu lógica de reintento. Querrás monitorear con qué frecuencia fallan las solicitudes, el tiempo que lleva los intentos de reintento, etc. Tener estos datos puede mejorar drásticamente la confiabilidad de tu aplicación.

Preguntas Frecuentes

Q: ¿Por qué usar PydanticAI en lugar de opciones tradicionales?

A: PydanticAI permite un manejo estructurado de datos y una validación automática de tus respuestas de API, algo que es difícil de gestionar manualmente. Con 15,593 estrellas en GitHub, PydanticAI ha demostrado ser popular, lo que puede significar un mejor soporte y recursos de la comunidad.

Q: ¿Qué pasa si mi API requiere autenticación?

A: Necesitarás extender el cliente HTTP para incluir encabezados de autenticación. Esto se puede hacer modificando la inicialización de httpx.AsyncClient() para incluir un parámetro auth si tu API admite autenticación básica, o usando tokens de OAuth según sea necesario.

Q: ¿Hay una alternativa a la lógica de reintento en aplicaciones en tiempo real?

A: Aunque la lógica de reintento es esencial, considera implementar patrones de circuito de ruptura como una capa adicional de resiliencia. Esto permite que tu aplicación responda a fallos de manera más suave y puede reducir la carga del servidor durante las caídas.

Recomendaciones para Diferentes Perfiles de Desarrollador

Si eres nuevo en este mundo de la obtención de datos:

  • Desarrollador Nuevo: Enfócate en dominar los básicos, familiarizarte con las solicitudes HTTP y modelar tus modelos a partir de APIs reales.
  • Desarrollador Intermedio: Investiga mecanismos de reintento avanzados y estrategias de optimización del rendimiento. Considera crear un método de reintento personalizado para mayor flexibilidad.
  • Desarrollador Senior: Dedica tiempo a afinar el manejo de errores y patrones de observador que puedan proporcionar mejores ideas sobre el comportamiento de tu aplicación bajo carga. ¡Las métricas y el registro son tus amigos!

Datos a partir del 20 de marzo de 2026. Fuentes: pydantic/pydantic-ai, Pydantic AI Retries, Agregar Comportamiento de Reintento Personalizado.

Artículos Relacionados

🕒 Published:

🧰
Written by Jake Chen

Software reviewer and AI tool expert. Independently tests and benchmarks AI products. No sponsored reviews — ever.

Learn more →
Browse Topics: AI & Automation | Comparisons | Dev Tools | Infrastructure | Security & Monitoring
Scroll to Top