Llámalos de forma concurrente en vez de en secuencia. En un framework asíncrono, lanza los tres con asyncio.gather o con un task group, para que la latencia total sea la de la llamada más lenta y no la suma. Ponle un timeout a cada llamada, decide qué respuestas son opcionales para poder degradar en vez de fallar, y cachea lo que sea estable. Si el cliente lo tolera, devuelve un id de trabajo.
Por qué lo preguntan los entrevistadores
Es una pregunta de diseño de sistemas disfrazada de Python. El entrevistador quiere instinto de concurrencia, pero más que eso quiere pensamiento sobre fallos: timeouts en cada llamada de red, degradación parcial y qué ve el usuario cuando una dependencia está caída. Quien responde solo con gather y se para ahí no ha operado nada que dependa de servicios que no controla.
Cómo estructurar tu respuesta
- Convierte las llamadas secuenciales en concurrentes.
- Pon un timeout en cada llamada saliente.
- Decide qué es opcional y degrada con elegancia.
- Añade caché o mueve el trabajo a un job en segundo plano.
Ejemplo de respuesta
En secuencia esas tres latencias se suman, así que el primer movimiento es lanzarlas juntas. Con httpx y un handler asíncrono hago gather de las tres corrutinas, o uso un task group para que un fallo cancele a las hermanas de forma limpia, y entonces el endpoint cuesta más o menos lo que el servicio externo más lento en vez de la suma. Cada llamada lleva un timeout explícito, porque en la mayoría de los clientes el valor por defecto es prácticamente infinito y un socket colgado te agota el pool de workers. Después decido qué es imprescindible. Si dos de los tres son decoración, recojo las excepciones en vez de lanzarlas y pinto la página sin ellos, en lugar de devolver un quinientos, y emito una métrica para que sigamos sabiendo que pasó. Todo lo estable se cachea, porque incluso sesenta segundos de caché quitan la mayor parte de la carga. Si el cliente lo tolera, la forma mejor es aceptar la petición, encolar el trabajo y devolver un id de trabajo para consultar, lo que saca la latencia externa por completo de la ruta de la petición.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué pasa si un servicio externo se cuelga más allá de tu timeout?
- ¿Cómo propagas la cancelación por esas tareas?
- ¿Dónde pondrías un circuit breaker?
Más preguntas para Desarrollador Python
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas