Celery es una biblioteca de colas de tareas asíncronas para Python. Permite ejecutar tareas en segundo plano de forma asíncrona para no bloquear el hilo principal. Incluye características como programación de tareas periódicas, reintentos automáticos, agrupación y encadenamiento de tareas, y herramientas de monitorización.
GoogleMock is a framework for creating mock objects in C++. Mock objects implement the same interfaces as real objects but allow specifying expectations for method calls. There are three main steps to using GoogleMock: 1) define a mock class using macros, 2) create mock objects and specify expectations, and 3) exercise code using mocks and check expectations are met. Key features include setting expected call order, arguments, return values, and catching violations. Mocks isolate code from complex dependencies and allow focused testing.
Este documento proporciona una introducción a JavaScript (JS). Explica que JS es un lenguaje de programación interpretado, orientado a objetos y débilmente tipado que se ejecuta en el lado del cliente. Describe características como su sintaxis, tipos de datos, operadores, estructuras de control de flujo, funciones predefinidas y de usuario, y el ámbito de las variables. También cubre temas como la interpretación, imperatividad, orientación a objetos, prototipado, tipado débil y dinamismo de JS.
Introducción a Celery y las colas de tareas asíncronasalbertoalcolea
Introducción al framework Celery y a las colas de tareas asíncronas en Python.
Código fuente de los ejemplos disponible aquí:
https://github.com/albertoalcolea/charla-celery
Este documento presenta una introducción a la concurrencia en Java, incluyendo temas como threads, Runnable, Callable, synchronized, Atomic, Future, ExecutorService, ThreadPool, ForkJoinPool, ForkJoinTask, ParallelStream y la ley de Amdahl. Proporciona código de ejemplo para ilustrar el uso de threads, comunicación entre threads, Executors y CompletableFuture. El objetivo es llevar al lector de principiante a competente en conceptos básicos de concurrencia en Java.
Slides for my talk in FrontFest 2018 (Madrid, Feb 17). It's a technical comparison of the change detection mechanism as implemented in AngularJS, React, Angular2 and VueJS
See demos at https://github.com/jabadia/frontfest-frameworks-demos
GoogleMock is a framework for creating mock objects in C++. Mock objects implement the same interfaces as real objects but allow specifying expectations for method calls. There are three main steps to using GoogleMock: 1) define a mock class using macros, 2) create mock objects and specify expectations, and 3) exercise code using mocks and check expectations are met. Key features include setting expected call order, arguments, return values, and catching violations. Mocks isolate code from complex dependencies and allow focused testing.
Este documento proporciona una introducción a JavaScript (JS). Explica que JS es un lenguaje de programación interpretado, orientado a objetos y débilmente tipado que se ejecuta en el lado del cliente. Describe características como su sintaxis, tipos de datos, operadores, estructuras de control de flujo, funciones predefinidas y de usuario, y el ámbito de las variables. También cubre temas como la interpretación, imperatividad, orientación a objetos, prototipado, tipado débil y dinamismo de JS.
Introducción a Celery y las colas de tareas asíncronasalbertoalcolea
Introducción al framework Celery y a las colas de tareas asíncronas en Python.
Código fuente de los ejemplos disponible aquí:
https://github.com/albertoalcolea/charla-celery
Este documento presenta una introducción a la concurrencia en Java, incluyendo temas como threads, Runnable, Callable, synchronized, Atomic, Future, ExecutorService, ThreadPool, ForkJoinPool, ForkJoinTask, ParallelStream y la ley de Amdahl. Proporciona código de ejemplo para ilustrar el uso de threads, comunicación entre threads, Executors y CompletableFuture. El objetivo es llevar al lector de principiante a competente en conceptos básicos de concurrencia en Java.
Slides for my talk in FrontFest 2018 (Madrid, Feb 17). It's a technical comparison of the change detection mechanism as implemented in AngularJS, React, Angular2 and VueJS
See demos at https://github.com/jabadia/frontfest-frameworks-demos
El documento describe el método heurístico para balancear líneas de producción. Explica cómo determinar los tiempos de tareas, construir diagramas de precedencia y agrupar tareas en estaciones de trabajo para lograr la tasa de producción requerida de manera eficiente. Proporciona un ejemplo para ilustrar cómo calcular el tiempo de ciclo, número de estaciones y asignar tareas a estaciones usando la heurística del mayor número de sucesores.
Este documento presenta los fundamentos de las instrucciones de control en Java, incluyendo repetición (for, while, do-while), selección (switch), y operadores lógicos (&&, ||, !). Explica cómo usar estas instrucciones con ejemplos como contadores, cálculo de intereses, y calificaciones escolares.
El documento introduce las funciones recursivas. Explica que una función recursiva es aquella que se llama a sí misma de forma repetida hasta cumplir una condición de parada. Proporciona ejemplos de funciones recursivas como calcular el factorial de un número, invertir una cadena y calcular la potencia de un número. También advierte sobre posibles errores como omitir el caso base o escribir el paso recursivo de manera incorrecta, lo que puede causar una recursividad infinita.
Este documento resume los siguientes temas sobre programación paralela en C#:
1) Paralelización de código imperativo usando Parallel.Invoke, Parallel Loops, y manejo de excepciones y particionamiento.
2) Programación paralela con tareas usando Task, tiempos de espera, cancelación, excepciones y retorno de valores.
3) Colecciones de concurrencia como ConcurrentQueue y estructuras para coordinar datos.
El documento presenta las instrucciones de control en C++, incluyendo repetición (for, while, do-while), selección (switch), y alteración del flujo (break, continue). También cubre operadores lógicos como AND, OR y NOT para formar expresiones condicionales complejas. El objetivo es que los lectores comprendan y utilicen estas herramientas para ejecutar instrucciones de manera repetitiva y controlar el flujo de un programa.
El documento explica conceptos sobre funciones y recursividad en C++. Indica que las funciones permiten dividir un programa en módulos reutilizables y facilitan el desarrollo mediante la construcción a partir de piezas pequeñas. También presenta ejemplos de funciones matemáticas, funciones con parámetros, funciones recursivas y el uso de números aleatorios.
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesMartín Volpe
Uno de los principales problemas al momento de crear aplicaciones de escritorio es el manejo del flujo de ejecución. Este problema se complica considerablemente al tener que ejecutar funciones bloqueantes. Twisted, a pesar de estar diseñado para networking, tiene una serie de herramientas para el maenjo ascincrónico del flujo facilmente adaptables a los Toolkits gráficos mas populares.
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
Este documento presenta conceptos sobre programación funcional y orientada a objetos, incluyendo paradigmas de programación, objetos inmutables, lambdas, traits, mixins, comunicación entre procesos asíncrona y síncrona, y el patrón promesa. También describe técnicas de programación funcional como traits, mixins y lambdas en varios lenguajes de programación como Java, C#, C/C++.
Este documento presenta una serie de ejercicios resueltos de programación en JavaScript utilizando ECMAScript 6. Incluye ejemplos de uso de clases, objetos, arrays, jQuery y JSON. Explica conceptos como objetos, patrones de diseño y métodos para crear y manipular elementos en la pantalla.
Typescript está de moda. Un lenguaje fuertemente tipado, con objetos basados en clases, que viene a corregir los problemas históricos de javascript con el apoyo de Microsoft y Angular.
Por otro lado, Dart es un lenguaje desarrollado por Google como alternativa a javascript, que viene a cubrir también los problemas históricos de javascript.
¿Es Dart una alternativa real a Typescript?
En esta charla vamos a ver una comparativa "face to face" entre los 2 lenguajes, basada en ejemplos. Características, sintaxis, performance, ecosistema,...
¿Llegaremos a alguna conclusión?
Javascript no para de expandirse y avanzar. Y ahora, con la llegada de EcmaScript 6, ciertos workflows y la forma de escribir código va a cambiar. Ahora los javascripters vamos a tener más herramientas en nuestras manos. Ya hay frameworks populares como Angular que sus futuras versiones vendrán en EcmaScript 6. ¿Porqué no hecharle un vistazo al futuro?
Charla impartida por Luis Calvo en la última edición de Codemotion (Madrid, Spain - Nov 21-22)
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
El documento presenta una introducción al desarrollo frontend con Angular 6. Los objetivos incluyen comprender el desarrollo frontend con Angular, utilizar un framework MVC como Angular, y ser capaz de desarrollar una Single Page App. Se explican conceptos como TypeScript, Bootstrap, servicios y enrutamiento. Finalmente, se muestra cómo crear y extender un repositorio para migrar la aplicación con servicios backend.
Este documento presenta 12 ejercicios sobre el uso de funciones y procedimientos en PL/SQL. Los ejercicios cubren temas como parámetros, sentencias SELECT e INSERT, y las diferencias entre funciones y procedimientos. El objetivo final es desarrollar funciones y procedimientos para realizar operaciones comunes en una biblioteca universitaria como registrar préstamos de libros, calcular multas por atrasos y devoluciones.
JHipster es un generador de código basado en Yeoman que nos genera un proyecto con Spring Boot en el back-end y con Angular en el front-end.
Llevo un año y medio desarrollando con Spring Boot y Angular y desde hace unos meses, mis nuevos desarrollos los realizo con JHipster. Por eso me he decidido a proponer este taller en donde montaré una pequeña aplicación con este tándem, y en donde hablaré también de mi propia experiencia.
Para poder asistir al taller es necesario tener instalado JHipster y tu IDE favorito (yo usaré Spring Tool Suite para back y Visual Studio Code para front). Para no tener problemas de descarga durante el taller tenéis que crearos un proyecto vacío, en el cual haremos modificaciones durante el taller. Creároslo con los valores por defecto, y luego ejecutarlo con ./mvnw para que se descarguen todas las librerías. Deberíais poder ver algo en http://localhost:8080 ;)
El documento describe conceptos clave sobre recursividad y eficiencia de algoritmos. Explica que la recursividad implica que un método se llame a sí mismo, y debe contener un caso base y uno recursivo. También cubre temas como bucles, notación asintótica, y ejemplos como factoriales y búsqueda binaria que ilustran el enfoque "dividir para vencer".
Este documento presenta una introducción a la programación orientada a objetos en Java. Explica los conceptos básicos de Java como su independencia de plataforma, seguridad, simplicidad y orientación a objetos. También describe características como el modelo de bytecode de Java, las ediciones estándar y los tipos de aplicaciones que se pueden crear con Java como aplicaciones independientes, web y servicios. Finalmente, detalla estructuras de control como if/else, switch, while, do/while y for.
Este documento habla sobre promesas no bloqueantes y cómo funcionan. Explica que una promesa representa el estado de una operación asíncrona como pendiente, cumplida o rechazada. Los métodos then permiten agregar callbacks que se ejecutarán en orden cuando la promesa se cumpla o rechace. Las promesas permiten encadenar operaciones asíncronas de forma no bloqueante y manejar errores de forma más limpia que con callbacks anidados.
El documento describe las funciones en JavaScript. Las funciones permiten agrupar código y reutilizarlo mediante su nombre. Una función consta de un nombre, parámetros, un bloque de código y puede devolver un valor. Las funciones son útiles para agrupar lógica reutilizable y JavaScript incluye funciones predefinidas como parseInt() y alert().
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)AbrahamCastillo42
Power point, diseñado por estudiantes de ciclo 1 arquitectura de plataformas, esta con la finalidad de dar a conocer el componente hardware llamado tarjeta de video..
Más contenido relacionado
Similar a No hagas ahora lo que puedes dejar para otro momento (Celery)
El documento describe el método heurístico para balancear líneas de producción. Explica cómo determinar los tiempos de tareas, construir diagramas de precedencia y agrupar tareas en estaciones de trabajo para lograr la tasa de producción requerida de manera eficiente. Proporciona un ejemplo para ilustrar cómo calcular el tiempo de ciclo, número de estaciones y asignar tareas a estaciones usando la heurística del mayor número de sucesores.
Este documento presenta los fundamentos de las instrucciones de control en Java, incluyendo repetición (for, while, do-while), selección (switch), y operadores lógicos (&&, ||, !). Explica cómo usar estas instrucciones con ejemplos como contadores, cálculo de intereses, y calificaciones escolares.
El documento introduce las funciones recursivas. Explica que una función recursiva es aquella que se llama a sí misma de forma repetida hasta cumplir una condición de parada. Proporciona ejemplos de funciones recursivas como calcular el factorial de un número, invertir una cadena y calcular la potencia de un número. También advierte sobre posibles errores como omitir el caso base o escribir el paso recursivo de manera incorrecta, lo que puede causar una recursividad infinita.
Este documento resume los siguientes temas sobre programación paralela en C#:
1) Paralelización de código imperativo usando Parallel.Invoke, Parallel Loops, y manejo de excepciones y particionamiento.
2) Programación paralela con tareas usando Task, tiempos de espera, cancelación, excepciones y retorno de valores.
3) Colecciones de concurrencia como ConcurrentQueue y estructuras para coordinar datos.
El documento presenta las instrucciones de control en C++, incluyendo repetición (for, while, do-while), selección (switch), y alteración del flujo (break, continue). También cubre operadores lógicos como AND, OR y NOT para formar expresiones condicionales complejas. El objetivo es que los lectores comprendan y utilicen estas herramientas para ejecutar instrucciones de manera repetitiva y controlar el flujo de un programa.
El documento explica conceptos sobre funciones y recursividad en C++. Indica que las funciones permiten dividir un programa en módulos reutilizables y facilitan el desarrollo mediante la construcción a partir de piezas pequeñas. También presenta ejemplos de funciones matemáticas, funciones con parámetros, funciones recursivas y el uso de números aleatorios.
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesMartín Volpe
Uno de los principales problemas al momento de crear aplicaciones de escritorio es el manejo del flujo de ejecución. Este problema se complica considerablemente al tener que ejecutar funciones bloqueantes. Twisted, a pesar de estar diseñado para networking, tiene una serie de herramientas para el maenjo ascincrónico del flujo facilmente adaptables a los Toolkits gráficos mas populares.
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
Este documento presenta conceptos sobre programación funcional y orientada a objetos, incluyendo paradigmas de programación, objetos inmutables, lambdas, traits, mixins, comunicación entre procesos asíncrona y síncrona, y el patrón promesa. También describe técnicas de programación funcional como traits, mixins y lambdas en varios lenguajes de programación como Java, C#, C/C++.
Este documento presenta una serie de ejercicios resueltos de programación en JavaScript utilizando ECMAScript 6. Incluye ejemplos de uso de clases, objetos, arrays, jQuery y JSON. Explica conceptos como objetos, patrones de diseño y métodos para crear y manipular elementos en la pantalla.
Typescript está de moda. Un lenguaje fuertemente tipado, con objetos basados en clases, que viene a corregir los problemas históricos de javascript con el apoyo de Microsoft y Angular.
Por otro lado, Dart es un lenguaje desarrollado por Google como alternativa a javascript, que viene a cubrir también los problemas históricos de javascript.
¿Es Dart una alternativa real a Typescript?
En esta charla vamos a ver una comparativa "face to face" entre los 2 lenguajes, basada en ejemplos. Características, sintaxis, performance, ecosistema,...
¿Llegaremos a alguna conclusión?
Javascript no para de expandirse y avanzar. Y ahora, con la llegada de EcmaScript 6, ciertos workflows y la forma de escribir código va a cambiar. Ahora los javascripters vamos a tener más herramientas en nuestras manos. Ya hay frameworks populares como Angular que sus futuras versiones vendrán en EcmaScript 6. ¿Porqué no hecharle un vistazo al futuro?
Charla impartida por Luis Calvo en la última edición de Codemotion (Madrid, Spain - Nov 21-22)
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
El documento presenta una introducción al desarrollo frontend con Angular 6. Los objetivos incluyen comprender el desarrollo frontend con Angular, utilizar un framework MVC como Angular, y ser capaz de desarrollar una Single Page App. Se explican conceptos como TypeScript, Bootstrap, servicios y enrutamiento. Finalmente, se muestra cómo crear y extender un repositorio para migrar la aplicación con servicios backend.
Este documento presenta 12 ejercicios sobre el uso de funciones y procedimientos en PL/SQL. Los ejercicios cubren temas como parámetros, sentencias SELECT e INSERT, y las diferencias entre funciones y procedimientos. El objetivo final es desarrollar funciones y procedimientos para realizar operaciones comunes en una biblioteca universitaria como registrar préstamos de libros, calcular multas por atrasos y devoluciones.
JHipster es un generador de código basado en Yeoman que nos genera un proyecto con Spring Boot en el back-end y con Angular en el front-end.
Llevo un año y medio desarrollando con Spring Boot y Angular y desde hace unos meses, mis nuevos desarrollos los realizo con JHipster. Por eso me he decidido a proponer este taller en donde montaré una pequeña aplicación con este tándem, y en donde hablaré también de mi propia experiencia.
Para poder asistir al taller es necesario tener instalado JHipster y tu IDE favorito (yo usaré Spring Tool Suite para back y Visual Studio Code para front). Para no tener problemas de descarga durante el taller tenéis que crearos un proyecto vacío, en el cual haremos modificaciones durante el taller. Creároslo con los valores por defecto, y luego ejecutarlo con ./mvnw para que se descarguen todas las librerías. Deberíais poder ver algo en http://localhost:8080 ;)
El documento describe conceptos clave sobre recursividad y eficiencia de algoritmos. Explica que la recursividad implica que un método se llame a sí mismo, y debe contener un caso base y uno recursivo. También cubre temas como bucles, notación asintótica, y ejemplos como factoriales y búsqueda binaria que ilustran el enfoque "dividir para vencer".
Este documento presenta una introducción a la programación orientada a objetos en Java. Explica los conceptos básicos de Java como su independencia de plataforma, seguridad, simplicidad y orientación a objetos. También describe características como el modelo de bytecode de Java, las ediciones estándar y los tipos de aplicaciones que se pueden crear con Java como aplicaciones independientes, web y servicios. Finalmente, detalla estructuras de control como if/else, switch, while, do/while y for.
Este documento habla sobre promesas no bloqueantes y cómo funcionan. Explica que una promesa representa el estado de una operación asíncrona como pendiente, cumplida o rechazada. Los métodos then permiten agregar callbacks que se ejecutarán en orden cuando la promesa se cumpla o rechace. Las promesas permiten encadenar operaciones asíncronas de forma no bloqueante y manejar errores de forma más limpia que con callbacks anidados.
El documento describe las funciones en JavaScript. Las funciones permiten agrupar código y reutilizarlo mediante su nombre. Una función consta de un nombre, parámetros, un bloque de código y puede devolver un valor. Las funciones son útiles para agrupar lógica reutilizable y JavaScript incluye funciones predefinidas como parseInt() y alert().
Similar a No hagas ahora lo que puedes dejar para otro momento (Celery) (20)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)AbrahamCastillo42
Power point, diseñado por estudiantes de ciclo 1 arquitectura de plataformas, esta con la finalidad de dar a conocer el componente hardware llamado tarjeta de video..
SOPRA STERIA presenta una aplicació destinada a persones amb discapacitat intel·lectual que busca millorar la seva integració laboral i digital. Permet crear currículums de manera senzilla i intuitiva, facilitant així la seva participació en el mercat laboral i la seva independència econòmica. Aquesta iniciativa no només aborda la bretxa digital, sinó que també contribueix a reduir la desigualtat proporcionant eines accessibles i inclusives. A més, "inCV" està alineat amb els Objectius de Desenvolupament Sostenible de l'Agenda 2030, especialment els relacionats amb el treball decent i la reducció de desigualtats.
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)codesiret
Los protocolos son conjuntos de
normas para formatos de mensaje y
procedimientos que permiten a las
máquinas y los programas de aplicación
intercambiar información.
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
para programadores y desarrolladores de inteligencia artificial y machine learning, como se automatiza una cadena de valor o cadena de valor gracias a la teoría por Manuel Diaz @manuelmakemoney
HPE presenta una competició destinada a estudiants, que busca fomentar habilitats tecnològiques i promoure la innovació en un entorn STEAM (Ciència, Tecnologia, Enginyeria, Arts i Matemàtiques). A través de diverses fases, els equips han de resoldre reptes mensuals basats en àrees com algorísmica, desenvolupament de programari, infraestructures tecnològiques, intel·ligència artificial i altres tecnologies. Els millors equips tenen l'oportunitat de desenvolupar un projecte més gran en una fase presencial final, on han de crear una solució concreta per a un conflicte real relacionat amb la sostenibilitat. Aquesta competició promou la inclusió, la sostenibilitat i l'accessibilitat tecnològica, alineant-se amb els Objectius de Desenvolupament Sostenible de l'ONU.
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaAMADO SALVADOR
Descubre el catálogo general de la gama de productos de refrigeración del fabricante de electrodomésticos Miele, presentado por Amado Salvador distribuidor oficial Miele en Valencia. Como distribuidor oficial de electrodomésticos Miele, Amado Salvador ofrece una amplia selección de refrigeradores, congeladores y soluciones de refrigeración de alta calidad, resistencia y diseño superior de esta marca.
La gama de productos de Miele se caracteriza por su innovación tecnológica y eficiencia energética, garantizando que cada electrodoméstico no solo cumpla con las expectativas, sino que las supere. Los refrigeradores Miele están diseñados para ofrecer un rendimiento óptimo y una conservación perfecta de los alimentos, con características avanzadas como la tecnología de enfriamiento Dynamic Cooling, sistemas de almacenamiento flexible y acabados premium.
En este catálogo, encontrarás detalles sobre los distintos modelos de refrigeradores y congeladores Miele, incluyendo sus especificaciones técnicas, características destacadas y beneficios para el usuario. Amado Salvador, como distribuidor oficial de electrodomésticos Miele, garantiza que todos los productos cumplen con los más altos estándares de calidad y durabilidad.
Explora el catálogo completo y encuentra el refrigerador Miele perfecto para tu hogar con Amado Salvador, el distribuidor oficial de electrodomésticos Miele.
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
No hagas ahora lo que puedes dejar para otro momento (Celery)
1. Celery
No hagas ahora lo que puedes dejar para otro momento
Antonio Páez - Open South Code 2017
2. Sin Celery
Mundo síncrono: Un hilo
comienza y ejecuta todas las
tareas.
- Actualizar datos
externos
- Enviar email
- Generar pdf
Criterio: Los resultados de una
tarea no son necesarios para la
siguiente
Procesa entrada
Haz esto
Haz lo otro
Procesa sálida
Petición
Respuesta
3. Con celery
Mundo asíncrono: Un
hilo ejecuta las tareas
principales.
Otro hilo ejecutará las
tareas adicionales.
Procesa entrada
Haz cosas
Cola de
adicionales
Procesa sálida
Petición
Respuesta
Ejecutar
adicionales
5. ¿Qué es Celery?
Celery es una cola de tareas asíncronas basada
en el paso de mensajes distribuidos.
Se enfoca a tareas en tiempo real, pero
también soporta la programación de tareas
periódicas.
6. Objetivos de hoy
■ Terminología
■ Introducción
■ Ejemplos de uso
■ Tareas periódicas
■ Tricks and Tips
■ Monitorización
7. ¿Qué necesitamos?
■ Celery: Paquete Python, también disponible para Node y PHP
■ Message Broker: RabbitMQ, Redis, SQLite... Sitio donde almacenar
las tareas
■ Results Store: RPC, Redis, Memcached… Sitio donde almacenar las
respuestas
■ Worker: Unidad que ejecuta una tarea de la cola.
■ Beat/Scheduler: Crear tareas para un momento dado.
14. Llamando a tareas
delay vs apply_async
apply_async puede recibir opciones de ejecución:
● countdown: espera un tiempo para ejecutar
● expires: cancela ejecución en un tiempo
● eta: ejecuta en un momento exacto
task.delay(arg1, arg2, kwarg1='x', kwarg2='y')
task.apply_async(args=[arg1, arg2], kwargs={'kwarg1': 'x', 'kwarg2': 'y'})
task.delay(arg1, arg2, 'x', 'y')
task.apply_async((arg1, arg2, 'x', 'y'))
task.apply_async((arg1, arg2, 'x', 'y'), countdown=60, expires=120)
15. Comprobar tareas
Consultas al backend de resultados.
■ result.ready(): la tarea ha comenzado a ejecutarse
■ result.get(): resultado de la tarea, esperando si no ha terminado
■ result.successful(): la tarea terminó satisfactoriamente
■ result.revoke(): cancelar una tarea
■ result.result: resultado de la tarea
■ result.status: estado del resultado (PENDING, STARTED, RETRY,
SUCCESS, FAILURE)
from celery import Celery
app = Celery('tasks', backend='redis://localhost:6379/0', broker='pyamqp://guest@localhost//')
16. Enganchando tareas
El resultado de una tarea será recibido por la siguiente.
add.apply_async((2, 2), link=add.s(16))
add.apply_async((2, 2), link=[add.s(16), other_task.s()])
from celery import chain
add.apply_async((2, 2), link=chain(add.s(16), other_task.s()))
17. Agrupando tareas
El resultado no está disponible hasta que acaban todas las tareas.
from celery import group
g = group(add.s(2, 2), add.s(4, 4))
res = g.apply_async()
19. Programación de tareas
Para tener más control de cuando ejecutamos las tareas, celery ofrece
un programador al estilo crontab.
from celery.schedules import crontab
app.conf.beat_schedule = {
# Executes every Monday morning at 7:30 a.m.
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
20. Programación de tareas
Para que las tareas se programen, necesitamos una instancia de celery
y un fichero para almacenar la última ejecución.
$ celery -A tasks beat -s /home/celery/var/run/celerybeat-schedule
Nota: La extensión django-celery-beat permite almacenar los programas en base de datos, además de una
interfaz para facilitar la gestión.
23. Reintentar tarea
Si no se indica nada, default_retry_delay está a 3 minutos.
Podemos indicar un valor diferente de dos modos.
@app.task(bind=True, default_retry_delay=30 * 60) # retry in 30 minutes.
def add(self, x, y):
try:
something_raising()
except Exception as exc:
# overrides the default delay to retry after 1 minute
raise self.retry(exc=exc, countdown=60)
24. Reintentar tarea
Con autoretry_for podemos definir bajo que excepciones se quiere
reintentar.
Con retry_kwargs definimos número máximo de reintentos.
@app.task(autoretry_for=(FailWhaleError,),
retry_kwargs={'max_retries': 5})
def refresh_timeline(user):
return twitter.refresh_timeline(user)
25. Reintentar tarea
Con autoretry_for podemos definir bajo que excepciones se quiere
reintentar.
Con retry_kwargs definimos número máximo de reintentos.
@app.task
def refresh_timeline(user):
try:
twitter.refresh_timeline(user)
except FailWhaleError as exc:
raise div.retry(exc=exc, max_retries=5)
26. Múltiples colas
La tarea import_feed de la aplicación feed irá a una nueva cola ‘feeds’.
Estos workers solo ejecutarán tareas de la cola ‘feeds’.
task_routes = {'feed.tasks.import_feed': {'queue': 'feeds'}}
$ celery -A proj worker -Q feeds
27. Unit tests
Aislar tests de las tareas.
Para probar integración, forzar sincronía.
CELERY_ALWAYS_EAGER = True
29. Monitorización desde línea de comandos
■ celery -A proj <comando>
■ status: lista nodos activos
■ result: resultado de una tarea
■ purge: Elimina los mensajes de todas las colas o de las indicadas.
$ celery -A tasks status
$ celery -A tasks result -t c9cf213e-4542-4a7a-b0d0-350dfb137581
$ celery -A tasks purge -Q feeds
30. Monitorización desde línea de comandos
■ celery -A proj <comando>
■ inspect active: Lista tareas activas.
■ inspect scheduled: Lista tareas reservadas.
■ migrate: Nuevo para migrar de un broker a otro
$ celery -A tasks inspect active
$ celery -A tasks inspect scheduled
$ celery -A tasks migrate redis://localhost amqp://localhost
33. Buenas prácticas
Usar retryNo pasar objetos del
orm como
argumentos a tareas
Usar más de una
cola
MonitorizarUsar logs Controlar la
persistencia del
broker