Bienvenida

1

Celery ¿Qué es, para qué sirve, cómo se usa?

2

Repositorio del proyecto

3

Arquitecturas de software basadas en mensajería y colas de tareas

4

Brokers de tareas: Servidores de mensajería y formas de usarlos

5

¿Cuándo debemos usar Celery?

6

Reto: Casos de uso de Celery

Bot de Slack

7

¿Cómo funciona un bot?

8

Cómo funciona el API de Slack para programación de bots (y parecidos y diferencias con otros APIs)

9

¿Cómo crear un bot reactivo?

10

Reto: posibles aplicaciones de bots de Slack, buscar ejemplos y entender cómo se llevarían a cabo

11

Reto: modificar el bot básico y crear alguno que responda a a algún tipo de petición o muestre algo

Brokers de mensajería

12

¿Qué es un broker de mensajería y cuándo debe usarse?

13

Conceptos: mecanismos de publicación/suscripción. Canales. Intercambiadores

14

Brokers de mensajería open source

15

Python con RabbitMQ uso básico de la terminal

16

Comparación de diferentes brokers de mensajería para trabajar con Celery

17

Reto: Crear una pequeña aplicación cliente-servidor que use RabbitMQ desde Python

Celery y brokers de mensajería

18

Creando un entorno de desarrollo para Celery

19

Instalación y creación de un programa básico pub/sub

20

Cómo usar Celery para programar un robot de Slack: diseño y comienzo de la implementación

21

Monitorización de tareas

22

Solucionando problemas

23

Reto: implementación y despliegue básico de un bot de Slack

Enrutado de tareas

24

Conceptos: enrutado de tareas y por qué se necesita

25

Enrutado manual

26

Mensajería en Celery: uso de Kombu

27

Enrutado automático

28

Reto: diseño de mecanismos de enrutado para un bot de Slack

Integración y despliegue en la nube

29

Estructura de mensajes en Celery y resultados de tareas

30

Tareas periódicas con Celery

31

Configuración de sistemas en la nube

32

Contenedores

33

Despliegue en un PaaS: Heroku

34

Uso de Celery con Node.js

35

Reto: despliegue en la nube (usando cuentas gratuitas)

Conclusiones

36

Despedida, conclusiones y a dónde ir desde aquí

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Celery 4

Curso de Celery 4

Juan Julián Merelo

Juan Julián Merelo

Reto: Casos de uso de Celery

6/36
Recursos

Casos de usos actuales:

  • CKAN, el almacén para datos abiertos, lo usa para ejecutar tareas y procesar webhooks.
  • Airflow es un sistema de flujos de trabajo o workflow que usa Celery para mensajería
  • Uso con Django.

Deja en la sección de comentarios si ¿Es aconsejable usar Celery en ese caso? ¿Por qué? ¿Qué mejoraras conseguirías?

Aportes 48

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Un reporteador que puede generar un archivo de tipo: pdf, xlsx, txt, etc, a partir de un html y una estructura en json.

Sin Celery:

Dependiendo de qué tan complejo sea el html y el tamaño del json puede ser un proceso muy largo que haga esperar varios segundos al usuario afectando la UX de una aplicación.

Sería imposible que el usuario pueda generar más de un reporte a la vez, siempre tendría que esperar a que se genere el reporte para poder generar otro.

Con Celery

Celery parece una buena alternativa acá ya que se le puede indicar al usuario que el reporte está siendo construido mientras él puede interactuar con otras opciones de la aplicación.

La aplicación debería tener una opción en la que ve el status de los reportes.

Crearé un proyecto que consista en un bot de Twitter que vaya recogiendo datos, los envie al broker de mensajería y con un procesador de datos genere eventos, pienso usar(como idea inicial):
-Python con Celery, Tweepy.
-RabbitMQ.
-Un procesador de datos de Apache como Flynk/Spark/Storm.
La implementación la realizaré en mi maquina local y la ejecución se realizará en mi maquina local.
Pienso que es aconsejable usar Celery debido a que el lenguaje principal será Python. por su compatibilidad con RabbitMQ y su eficiencia. Además de la cantidad de documentación que podré encontrar en Internet.

Consumiendo apis para recuperar historial de ventas, preguntas, publicaciones y todo desde amazon, mercadolibre, etc.

**Administrativo: ** Si tengo una aplicación que está funcionando en varias tiendas y me gustaría sacar el estado de todas al mismo tiempo, con celery puedo generar una petición que en segundo plano obtenga toda esa información, la convierta en un formato en especifico(pdf, csv, xml por dar algunos ejemplos), y una vez ha concluido la tarea, me entregue el reporte, expresando a que hora hizo el cierre de cada tienda, sus balances, cuentas, estados financieros, entre otros.

Edición: pre renderizar un video, una película, e incluso un modelo 3D en segundo plano, para evitar la carga directa en el programa, y que el servidor colapse.

Videojuegos:utilizando otras herramientas como NodeJS o ajax, se puede realizar una aplicación en linea donde los procesos sean realizados por celery, algunas acciones sean realizadas como segundo plano, como cargar escenarios, enemigos, reacciones, etc.

Celery, envío masivo de emails o mensajería de texto

Un caso de uso que tube una vez, fue que en una aplicación web teníamos que generar un reporte muy grande con información de una base de datos muy grande también, y eso se hacía entrando a un link, donde había un botón de descarga. Luego de dar click en el botón empezaba a generar ese reporte en pdf, y le toma varios minutos antes de que se pueda descargar, ahora pensando en celery haría una cola de trabajo donde se vayan recibiendo esas peticiones de descarga de ese reporte y una vez terminado se lo enviaría por mail al usuario que lo solicitó.

Podría ser bastante útil para controlar la petición de gráficas y estadísticas pesadas, procesos con datos a nivel de suministro como consumo energético, agua que tienen que mover muchísima información, histórico de pedidos, plataformas de servicio, procesos de indexado, etc.

Un analizador de intensiones de compra , pago o algun caso especifico contenido en la grabacion de llamada de un call center para manejar las colas pude ser en connjunto con redis se me ocurre ejemplo de flujo : 1. se almacena en un repositorio la grabacion de llamada ( se almacena en cache con redis y comienza su estatus base ) 2. pasamos el el audio por un nlu tipo LYIS o RASA para generar un archivo de texto 3. haremos el analisis semantico de el resultado del nlu 4. *liberamos de la cola y cambiamos el estatus de analisia en la base central de datos* 5. y si entiendo hasta ahora para que seria celery me permitiria correr N procesos paralelos sin necesidad de hacer un cuello de botella tanto en la base central de datos como en el usoi de los NLU
Actualmente estoy trabajando en un bot para Slack y celery me ha servido mucho para la sincronización de datos desde Google spreadsheets

Aplicacion que recopila datos climaticos de 5000 fuentes distintas, los almacena en una base de datos y luego calcula nuevos valores basados en dichos datos, estos datos deben estar disponibles a primera hora del día segun la zona horaria de los lugares y no debe perjudicar el resto de los trabajos.

Para esto se realizarían dos tipos de colas:
Tareas de recopilación de datos:
Habría dos tipos de tareas, tareas diarias y tareas horarias, las taras diarias se harían a última hora del dia, donde se enviarían a recopilar los datos de las páginas y apis y que prestan este servicio y las horarias que se re lanzarían cada hora, buscando datos actualizados en las páginas que actualizan sus datos por hora.
Para saber en que horario enviar las tareas diarias se puede usar flower para medir el tiempo de ejcucion de las tareas y de esta manera poder calcular el tiempo que necesita para estar lista a primera hora del día.

Tareas de calculo de datos:
Estas tareas se realizarían de manera diaría basados en la zona horaria de los lugares para poder tener la informacíon actualizada.

Sin celery esto sería imposible ya que colapsaría y no darían las horas del día para hacer todo.

Crear colas de:

  • Reportes muy pesados.
  • Enviar correos electrónicos.
  • APIs que tarden en procesar una respuesta.
  • Mensajes de un Bot de Telegram.

Se puede utilizar Celerey cuando se quiere alta escalabilidad.
Cuando quiero distribuir el trabajo de ciertos requests en motore específicos.

Una de las ventajas es madurez de la librerías.

Para trabajar con Python, es la mejor opción que tenemos en este momento.

En estos momento, una de las mejores decisiones de arquitectura es pensar en la escalabilidad desde las primeras etapas de la aplicación.

Si hay tareas muy pesadas, nos podemos beneficiar de una arquitectura basada en eventos. El hecho que podamos desacoplar las tareas pesada a microservicios, se pueden usar las mejores tecnologías para resolver ese problema en específico.

**Procesamiento de insights en csv: ** en una dashboard de métricas que he echo para la empresa de mis padres tengo que engancharme a una fuente de datos de un ERP muy antigüo que no tiene API (solo tiene unos pequeños endpoints que retornan archivos csv generados cada 15 días con las métricas del negocio) y cada esos 15 días tengo que pillar el nuevo csv que han sacado procesarlo, limpiar los datos, sacar los que me interesan y guardarlos en la base de datos. Para esto celery me viene estupendo no solo por el procesamiento de la tarea pesada sino también por usar celery beat para gestionar la periodicidad de la misma

Actualmente me enfrento a un problema de recolectar datos de otras APIs que se demoran en dar respuesta. Espero al finalizar este curso tener las bases necesarias para implementar una solución adecuada.

Podemos usar Celery en un Bot para hacer web scraping en Instagram, asi el usuario obtendria datos de su cuenta o sobre su engagement de forma interactiva

Usaria Celery para ver la salud financiera de un usuario al momento de solicitar un credito. Tomaria sus datos y ejecutaria diferentes tareas a cada banco para consultar su estatus financiera y con esta data evaluar con otra tarea si el usuario es apto para un credito bancario.

Crearia un cotizador de seguros de auto, donde me conecte a diveras fuentes de casas vendedoras de seguros y le daria las mejores o todas las opciones disponibles para su vehiculo.

Podría utilizarse para un sistema de mensajes interno (tipo DM) de una aplicación? Dejándole la responsabilidad a Celery mientras el usuario sigue usando la app.

Actualmente trabajo en un API para crear modelos de NLP y uno de los problemas que me enfrento es que aveces entrenar al modelo lleva 5/10 minutos y se hace de manera sincronica,es decir, hasta que no termina de hacerlo el usuario no puede pedir mas nada.

En este caso podria utilizar el asincronismo que me da celery para que el modelo quede entrenado y luego se guarde pero la API pueda seguir siendo consultada en sus otros microservicios

Tengo pensado crear una página web donde subir blog posts y compartir información sobre un centro cultural, también en él compartir fotos e informar sobre actividades de la misma.
Django - Celery:
Dicha plataforma será creado con Django y en la misma la útilización de Celery será para mandar mensajes a correos electrónicos, para informar sobre actividades a realizar y eventos que dicha institución vaya a realizar.
También podría ser una buena herramienta para informar a los usuarios sobre nuevos Posts y recomendaciones a los usuarios.

Lo usaría para procesar y transformar en el backend peticiones del frontend relacionadas a la carga de imágenes, por ejemplo en una aplicación móvil tipo instagram, en donde cada dispositivo tiene diferentes niveles de densidad de pixeles, a la hora de subir 1 o más imágenes, se debe proporcionar el user experience necesario para que el usuario no se quede esperando a que se carguen y procesen todas las imágenes, por lo que se podría en 2do plano con Celery, transformar cada imagen en diferentes resoluciones en una cola de trabajo y así se almacenarían de tal forma que al utilizarlas, el frontend pueda decidir qué resolución usar y no usar siempre la de mayor densidad de pixeles, esto correspondería con una tarea asíncrona.

Yo la usaría para :
Guardar logs de las respuesta de una API
Envío de correos
Tareas que ejecuten servicios externos, ese servicio externo puede fallar, al no depender de nosotros deberíamos enviar todo ese flujo a una tarea y guardamos un log.

Yo creo que me seria util para hacer un cargue de archivos excel procesarlos con una cola de tareas para hacerle una respectiva limpieza con pandas , me seria util para no hacer esperar al usuario si no almacenar y ir haciendo un proceso con todos los archivos guardados.

Igual estoy pensando en un bot de Telegram, que este conectado a mi programa. Y enviarle un mensaje en particular a mi bot y que ejecute una tarea muy tardada, y que me ejecute otra, y otra y al final me ejecute reportes, y al final me envie un mensaje de finalización, en donde yo pueda consultar los reportes de esa ejecución o la consulta de reportes anteriores sin que se interrumpa lo ya se quedó programado por abajo.

Para juegos que ejecuten multiples eventos a diferentes usuarios que estén conectados y suscritos a esos eventos, Para generar reportes, estadísticas. Para un sistema de fútbol que vaya trackeando cuánto va recorriendo un futbolista en la cancha, se podría generar colas de eventos por cada jugador.

Podría ser usado por ejemplo para:

Necesitamos procesar N número de conexiones a diferentes servidores, en los que el procesamiento puede ser tal que se creen nuevas instancias de la aplicación, si tenemos Celery, no nos preocuparíamos por duplicidad en base de datos, a demás de que estas tareas se harían en diferentes “hilos”.
Finalmente, en cada tarea se publicaría a NODE para notificar al cliente cuando cada uno de estos procesos termine 😃

En mi caso django ya vi que celery me permite recibir peticiones del usuario y enviarle con django un servicio.

Bueno yo podría usar celery como brocker de tareas en una aplicación de streaming en django por ejemplo para que exista una tarea específica que esté pendiente de las solicitudes de los usuarios, es decir, de los videos que cada uno quiere ver y otra tarea espcífica para buscar el archivo espacífico y enviarlo

Desarrollaria una aplicación para calcular el horario de enfermer@s en hospitales. En mi opinión, pienso que es aconsejable utilizar Celery porque dependiendo de la cantidad de horarios que se calculen, podría generarse un cuello de botella si la aplicación crece mucho, para evitar eso sería interesante distribuir cada horario que debe generarse (Task) a los Workers.

Trabajo en un minimarket, pues varias veces al día llegan facturas con pedidos y las debo apilar para a fin de mes contarla y sumarlas todas.
Quiero hacer un bot para Slack y cada vez que llegue una factura escribir el proveedor, código de factura y total. La idea es que mi bot pueda copiar el contenido a un excel para tener la información a mano. 😄

para envíos de email a usuarios de una aplicación, para procesos de tareas de una aplicación, para respuesta automáticas de aplicaciones, etc.

Envio de datos y logs desde estaciones metereologicas a un servidor que corre en Django.

APis que tarden en procesar
reportes muy pesados
bots

Envío de ofertas a clientes por email. Se carga una lista extensa de clientes csv a través de una interface web y el proceso de envío y recepción de respuestas, al ser procesos largos que no puede hacer el servidor web, se los delega a otro servicio que se encargue de los mismos y mientras que el servidor web puede devolver de inmediato el estatus de que la tarea a sido encolada.

Ahora que le voy encontrando diferentes usos, estoy construyendo un bot de telegram y pienso aplicarlo ahi, ademas creo que en la web con flask y django puedo aplicar algo de asincronismo para reducir tiempos de espera

¿Celery es una buena herramienta para consultas e inserciones masivas?

Se podría usar celery en el caso que tengamos una empresa que postea diferentes promociones en su sitio para notificarle a sus consumidores acerca de las promociones, asi como los push notifications en las aplicaciones móviles. Con esto celery se encargaría de hacer llegar a cada cliente la notificación correspondiente.

Reportes que requieran big data de cualquier aplicación

Un escenario chévere para aprovechar celery sería un robot al cual se le pase el nombre de una pelicula o serie y ya sea consultando una API o cualquier otro método de busqueda para obtener toda la información posible sobre ese titulo, y luego enviar toda esa información al correo del usuario.

Yo estoy desarrollando una app para registrar votos de canciones, sin duda llega un punto en el que tendrá que procesar muchas peticiones, lo incluiré en el proyecto.

Aporte para el reto

- Caso de Uso
App que recibe archivos con texto y debe retornar datos asociados con personas, empresas, ubicaciones geograficas,
Es necesario identificar idioma, luego analizar la información y por último organizar los datos a retornar.

- ¿Es aconsejable usar Celery en ese caso?
Por supuesto.

- ¿Porqué?
Por que podemos utilizar el poder de las colas de trabajo para garantizar la gestión y “atención” de cada archivo recibido.
Adicionalmente nos permite responder al usuario de manera inmediata, “Hemos recibido el archivo, está siendo procesado”. Que a su vez permite liberar al API de peticiones pendientes de respuesta.
Y muchas otras razones…

¿Qué mejorarías conseguirías?
Al utilizar Celery también podemos ganar en tiempo de ejecución para retonar la respuesta final esperada.
En este caso los datos con la categorización de persona, empresa, ubicación geográfica, etc.
Ya que podemos crear varios “workers” (procesos) que trabajen en simultaneo por cada proceso de extracción de datos o incluso que cada worker procese una porción de texto de cada archivo recibido.

Un dashboard que muestre resultados en tiempo real de diferentes encuestas que se agrupan en varias categorias, donde cada categoria se procesa en un componente diferente

Tengo una app que cuando un registro cambia de estatus debe hacer un push a un enpoint para notificar ese cambio.
En un flujo sin Celery esa notificación se corre en el hilo principal del proceso de la app, por que lo hasta que no se resuelva el request al endpoint no se continúa con el flujo.
Con Celery se delega la tarea de notificación a él y el proceso principal continúa.

Si no me equivoco Instagram está desarrollado en Django y usa Celery para las historias.

Un sistema IoT donde recibe valores de humedad, temperatura o estados de ciertas alarmas, y se debe enviar e-mails o SMS de esas alertas a las personas encargadas.

  • El cliente hardware de IoT debe tener una respuesta inmediata del servidor, por ese motivo no puede esperar a que el server resuelva el envio de las notificaciones. En este caso es útil usar Celery.

Un motor de búsqueda de proyectos que hace uso de tareas de PLN. Donde el motor de búsqueda siempre debe estar disponible para el usuario, respondiendo a las consultas que realicen. En caso que lleguen nuevos datos, las tareas de PLN se ejecutarán y el buscador seguirá disponible para su funcionamiento. Cuando las tareas terminan los nuevos datos serán usado por el buscador.

me imagino usar celery para crear una app que utilice inteligencia artificial para dar respuesta a algún requerimiento… creo que uno de los desafíos es justamente encontrar espacios y tecnologías que nos permitan llevar procesos muchas veces complejos a producción con una buena Ux 😄

Saludos!

Celery puede aprovecharse cuando tu backend se comunica con otro servicio externo y la petición tarde y luego con la información que te regrese generas un PDF.