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.
Puedes iniciar múltiples workers con la opción de línea de comandos --workers:
Si usas el comando fastapi:
<font color="#4E9A06">fastapi</font> run --workers 4 <u style="text-decoration-style:solid">main.py</u>
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.
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.
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.
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:
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.
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. ✨