¡Compártelo!

Celery: qué es, cómo funciona y mejores prácticas

En este post os vamos a hablar de una tecnología popular que todo/a desarrollador de Python debería aprender. Nos referimos a conocer qué es Celery, una implementación de cola de tareas o administrador de trabajos en segundo plano que mejora la experiencia del usuario y que ayuda a los/as programadores/as a ahorrar tiempo. 

A la hora de trabajar esperamos que las páginas y las tareas pequeñas carguen y se ejecuten rápidamente, pero en ocasiones las tareas pesadas pueden tardar más tiempo, unos segundos que a veces parecen una eternidad. Aquí entra en juego Celery, un administrador de tareas distribuido y asíncrono desarrollado en Python.

¿Qué es Celery?

Celery es una biblioteca de Python de código abierto que se utiliza para la ejecución de tareas paralelas de forma distribuida fuera del ciclo de solicitud-respuesta de HTTP. Permite ejecutar trabajos de forma asíncrona para no bloquear la ejecución normal del programa. 

Como hemos mencionado, esta tecnología mejora notablemente la experiencia del usuario, dando la posibilidad de ejecutar el programa o trabajos en segundo plano sin que afecte al perfecto funcionamiento del procesador.

Por qué es útil Celery

Para proporcionar una experiencia de usuario rápida cuando existe alguna tarea más compleja (programas o trabajos) ejecutándose en un segundo plano, se recurre a la programación asíncrona. Las tareas asincrónicas funcionan muy bien con las aplicaciones web ya que permiten que el usuario continúe navegando por su sitio mientras que algunas operaciones más costosas, como enviar un correo electrónico o insertar datos en una base de datos, se ejecutan fuera de la aplicación web. 

Celery permite programar tareas periódicas de manera muy fácil como enviar correos en un momento del día o acceder a la API de manera recurrente. Esta aplicación reduce el tiempo de carga de la página al ejecutar parte de la funcionalidad como tareas pospuestas en el mismo servidor o en otro momento en un servidor diferente, evitando esperas innecesarias.

Cómo funciona el Celery

Previamente a usar Celery, es necesario comprender algunos conceptos:

Para que los usuarios experimenten tiempos de carga rápidos en nuestra aplicación es necesario descargar parte del trabajo de nuestro servidor web. Mientras este servidor web permanece ocupado cargando la página siguiente, un servidor secundario realiza los cálculos en segundo plano. Estos últimos se conocen como nodos o workers, que permiten al servidor web principal procesar activamente numerosas tareas, haciendo que responda al usuario y sus comandos, mejorando de manera significativa la experiencia del usuario de forma inmediata.

Los workers gestionan las solicitudes web a través de de las colas de mensajes o tareas. Cuando un worker está disponible comienza a procesar la siguiente tarea.

Celery en realidad no almacena la cola de tareas en su memoria. Para almacenar las tareas necesita a un Message Broker (o Broker).

La cola de tarea es un intermediario de mensajes que actúa como puente entre el worker y el cliente. Esencialmente pasa mensajes entre la aplicación web y los workers de Celery. Celery es una implementación de cola de tareas que se encarga de ir asignándolas a los workers según sea necesario. Para iniciar una tarea, el cliente agrega un mensaje a la cola y el intermediario luego entrega ese mensaje al worker.

Celery, por tanto,se comunica a través de mensajes siendo normalmente el broker, que funciona como mediador entre clientes y workers.

Una vez se vayan ejecutando las tareas, el estado guardado y los resultados se vuelcan en el backend, de donde podrás extraerlos.

Qué es Celery

Características de Celery

  • Python Celery es un software de código abierto y gratuito
  • Es una biblioteca fácil de implementar y mantener ya que no requiere archivos de configuración. Se puede instalar desde la terminal usando el comando «pip install -U Celery».
  • Permite procesar millones de tareas por minuto y es compatible con el soporte de aplicaciones como RabbitMQ e IronMQ.
  • Tiene la posibilidad de controlar el número de tareas se pueden ejecutar por segundo/minuto/hora, o especificar cuánto tiempo se puede permitir que se ejecute una tarea.
  • Los workers emiten un flujo de eventos de monitoreo y las herramientas integradas y externas lo utilizan para informar en tiempo real lo que está haciendo su clúster.
  • Celery también se integra con varios marcos web de Python, como Pyramid, Django, Pylons, Trylons, Tornado, y Flask.
  • Casi todas las partes de Celery se pueden ampliar o usar por sí solas como implementaciones de grupos personalizados, serializadores, registro, esquemas de compresión, consumidores, programadores, transportes de intermediarios, etc.
  • Permite programar el tiempo particular para ejecutar una tarea usando el módulo datetime junto con celery beat

Mejores prácticas con Celery

En este apartado recogemos algunas de las prácticas más recomendadas para que las aplicaciones habilitadas para Celery funcionen de la mejor manera y permitan un mejor monitoreo.

  • Asigna un nombre a tus tareas.
  • Define siempre la cola de trabajos.
  • Escribe tareas cortas y concisas para poder entender lo que hace.
  • Comparte comportamiento común entre tareas usando una clase abstracta.
  • Da prioridad a una sola cola.
  • Usa ID de registro de base de datos como argumentos de tareas en lugar de objetos completos para reducir el tamaño de la cola de mensajes.
  • Elige el back-end de resultado correcto.
  • Asegúrate de tener puntos de control para que en caso de falla se pueda retomar de nuevo donde falló.
  • Prueba y depura las tareas en Celery.

Cómo instalarlo

Celery está disponible dentro del índice de paquetes de Python (PyPI). Puedes instalarlo con las herramientas estándar de Python de la siguiente manera pip or easy_install:

$ pip install celery

Conoce más detalles sobre los primeros pasos y su configuración aquí.

Conclusión

Celery es muy útil cuando ejecutamos tareas que requieren de la utilización de muchos recursos y rendimiento, como por ejemplo dentro del controlador de una solicitud HTTP, aunque se puede utilizar de múltiples maneras.

Al configurar colas de trabajo y ejecutar tareas simultáneamente poniéndolas en segundo plano, te permite planificar mejor tu trabajo y el tiempo de desarrollo para invertir tu tiempo en lo más importante.

Artículos ​ relacionados