Repaso
English
Backend y APIsAvanzadoAPI-16

En FastAPI debes llamar a un SDK lento y bloqueante. ¿Qué opción evita bloquear el event loop?

Opciones

  1. Llamarlo directamente dentro de un endpoint async def, como siempre
  2. Usar un endpoint def normal, o envolverlo con asyncio.to_thread (Opción correcta)
  3. Añadir await delante de la llamada síncrona al SDK
  4. Aumentar el timeout del servidor para que la llamada termine

Respuesta

Declara el endpoint con def normal (corre en un threadpool) o envuelve la llamada con run_in_threadpool/asyncio.to_thread

Por qué

Los endpoints async def se ejecutan directamente en el event loop, que nunca debe bloquearse.

FastAPI ejecuta los endpoints def normales en un pool de worker threads, así que una llamada bloqueante solo bloquea ese thread.

Dentro de código async, await asyncio.to_thread(sdk.call) mueve la llamada bloqueante a un thread. No puedes hacer await de una función normal (no async).

Recuerda

Librería bloqueante → endpoint def normal o to_thread.

Términos clave

Practica esta pregunta en Repaso