Saltar al contenido

Server Workers - Uvicorn con Workers

Revisemos nuevamente esos conceptos de despliegue de antes:

  • Seguridad - HTTPS
  • Ejecución al inicio
  • Reinicios
  • Replicación (el número de procesos en ejecución)
  • Memoria
  • Pasos previos antes de iniciar

Hasta este punto, con todos los tutoriales en la documentación, probablemente has estado ejecutando un programa servidor, por ejemplo, usando el comando fastapi, que ejecuta Uvicorn, ejecutando un solo proceso.

Al desplegar aplicaciones probablemente querrás tener alguna replicación de procesos para aprovechar múltiples núcleos y poder manejar más solicitudes.

Como viste en el capítulo anterior sobre Conceptos de Despliegue, hay múltiples estrategias que puedes usar.

Aquí te mostraré cómo usar Uvicorn con procesos worker usando el comando fastapi o el comando uvicorn directamente.

Nota

Si estás usando contenedores, por ejemplo con Docker o Kubernetes, te contaré más sobre eso en el próximo capítulo: FastAPI en Contenedores - Docker.

En particular, cuando se ejecuta en Kubernetes probablemente no querrás usar workers y en su lugar ejecutar un solo proceso de Uvicorn por contenedor, pero te hablaré sobre eso más adelante en ese capítulo.

Múltiples Workers

Puedes iniciar múltiples workers con la opción de línea de comandos --workers:

Si usas el comando fastapi:

fast →fastapi run --workers 4 main.py
FastAPI Starting production server 🚀

Searching for package file structure from directories with
__init__.py files
Importing from /home/user/code/awesomeapp

module 🐍 main.py

code Importing the FastAPI app object from the module with the
following code:

from main import app

app Using import string: main:app

server Server started at http://0.0.0.0:8000
server Documentation at http://0.0.0.0:8000/docs

Logs:

INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to
quit)
INFO Started parent process [27365]
INFO Started server process [27368]
INFO Started server process [27369]
INFO Started server process [27370]
INFO Started server process [27367]
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Waiting for application startup.
INFO Application startup complete.
INFO Application startup complete.
INFO Application startup complete.
INFO Application startup complete.

restart ↻

Si prefieres usar el comando uvicorn directamente:

fast →uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
INFO: Started parent process [27365]
INFO: Started server process [27368]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27369]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27370]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Started server process [27367]
INFO: Waiting for application startup.
INFO: Application startup complete.

restart ↻

La única opción nueva aquí es --workers indicándole a Uvicorn que inicie 4 procesos worker.

También puedes ver que muestra el PID de cada proceso, 27365 para el proceso padre (este es el gestor de procesos) y uno para cada proceso worker: 27368, 27369, 27370, y 27367.

Conceptos de Despliegue

Aquí viste cómo usar múltiples workers para paralelizar la ejecución de la aplicación, aprovechar múltiples núcleos en la CPU, y poder servir más solicitudes.

De la lista de conceptos de despliegue de arriba, usar workers ayudaría principalmente con la parte de replicación, y un poco con los reinicios, pero todavía necesitas encargarte de los demás:

  • Security - HTTPS
  • Running on startup
  • Restarts
  • Replicación (el número de procesos en ejecución)
  • Memory
  • Previous steps before starting

Contenedores y Docker

En el próximo capítulo sobre FastAPI en Contenedores - Docker explicaré algunas estrategias que podrías usar para manejar los otros conceptos de despliegue.

Te mostraré cómo construir tu propia imagen desde cero para ejecutar un solo proceso de Uvicorn. Es un proceso sencillo y probablemente lo que querrás hacer cuando uses un sistema de gestión de contenedores distribuido como Kubernetes.

Resumen

Puedes usar múltiples procesos worker con la opción del CLI --workers con los comandos fastapi o uvicorn para aprovechar CPUs multinúcleo, para ejecutar múltiples procesos en paralelo.

Podrías usar estas herramientas e ideas si estás configurando tu propio sistema de despliegue mientras te encargas de los otros conceptos de despliegue por tu cuenta.

Revisa el próximo capítulo para aprender sobre FastAPI con contenedores (ej. Docker y Kubernetes). Verás que esas herramientas tienen formas sencillas de resolver también los otros conceptos de despliegue. ✨