Repaso
English
PythonIntermedioPY-14

Dentro de un endpoint async def de FastAPI llamas a time.sleep(2) (o requests.get). ¿Qué pasa bajo carga?

Opciones

  1. Solo esa petición espera 2 segundos; las demás siguen ejecutándose
  2. El event loop queda bloqueado, así que se detienen todas las demás peticiones de ese worker (Opción correcta)
  3. FastAPI mueve la llamada bloqueante a un thread aparte automáticamente
  4. Python lanza un error porque no se permiten llamadas bloqueantes

Respuesta

Todo el event loop queda bloqueado; se detienen todas las demás peticiones de ese worker

Por qué

Un servidor async usa UN solo thread con un event loop. El loop cambia a otras peticiones cada vez que la actual está esperando en un await.

time.sleep y requests.get esperan sin await, así que el loop no puede cambiar: el thread se congela y todos los demás usuarios esperan también.

Usa versiones async (await asyncio.sleep, httpx.AsyncClient) o declara el endpoint con def normal, que FastAPI ejecuta en un thread aparte.

Recuerda

Nunca llames a código bloqueante dentro de async def.

Términos clave

Practica esta pregunta en Repaso