FastAPI – Background Tasks con Celery e Flower
FastAPI es un marco de desarrollo web rápido (high-performance) para crear APIs en Python. Con la capacidad de manejar un gran número de solicitudes por segundo, es una excelente opción para aplicaciones que requieren una alta eficiencia y rendimiento. En este artÃculo, revisaremos cómo podemos utilizar background tasks en FastAPI con Celery y Flower.
Background Tasks
Las background tasks son tareas que se ejecutan en segundo plano sin interferir con la respuesta de la solicitud principal. Estas tareas son útiles para procesos que pueden tomar mucho tiempo y no necesitan una respuesta inmediata. En FastAPI, podemos definir y ejecutar tareas en segundo plano utilizando la biblioteca Celery.
Instalación de Celery y Flower
Para comenzar, necesitamos instalar Celery y Flower. Puedes hacerlo utilizando el siguiente comando:
pip install celery flower
Luego, necesitamos configurar nuestra aplicación FastAPI para usar Celery. Podemos hacer esto creando un archivo de configuración de Celery y definiendo nuestras tareas en un archivo separado.
Ejemplo de tarea en segundo plano
Aquà hay un ejemplo de cómo podrÃamos definir una tarea en segundo plano que imprime un mensaje después de un cierto retraso:
from celery import Celery
app = Celery('tasks', broker='redis://localhost')
@app.task
def background_task():
print('Background task running...')
Para ejecutar esta tarea, simplemente llámala desde tu ruta FastAPI utilizando background_task.delay()
. La tarea se ejecutará en segundo plano sin bloquear la solicitud principal.
Flower
Para monitorear y administrar nuestras tareas Celery, podemos usar la interfaz web de Flower. Para iniciar Flower, simplemente ejecuta el siguiente comando en tu terminal:
celery -A tasks flower
Esto abrirá una interfaz web donde podrás ver el estado de tus tareas Celery, monitorear su progreso y ver estadÃsticas en tiempo real.
Conclusión
En resumen, utilizar background tasks en FastAPI con Celery y Flower es una forma eficiente de ejecutar tareas en segundo plano sin bloquear las solicitudes principales. Esto es especialmente útil para procesos que pueden tardar mucho tiempo en completarse. Con la combinación de FastAPI, Celery y Flower, podemos crear aplicaciones web de alto rendimiento con tareas en segundo plano de manera sencilla y eficaz.
Bella chicca, io in django avevo gestito una cosa del genere creando un thread che eseguiva il task in background. Una domanda, con l'aggiunta di celery come servizio serve anche modificare il dockerfile per fare il deploy!?