SlideShare una empresa de Scribd logo
Celery
No hagas ahora lo que puedes dejar para otro momento
Antonio Páez - Open South Code 2017
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
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
¿Qué es Celery?
¿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.
Objetivos de hoy
■ Terminología
■ Introducción
■ Ejemplos de uso
■ Tareas periódicas
■ Tricks and Tips
■ Monitorización
¿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.
¿Cómo funciona?
Introducción
Introducción
Instalar:
Definir tarea en fichero tasks.py:
$ pip install celery
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
Broker
Cola
Tarea
Introducción
Lanzar workers:
$ celery -A tasks worker --loglevel=info
Introducción
Llamar a la tarea:
Celery logs
In [1]: from tasks import add
In [2]: add(2, 1)
Out[2]: 3
In [3]: add.delay(2, 1)
Out[3]: <AsyncResult: 4b933116-3a07-4633-99cb-15f5448bb738>
[2017-05-04 17:43:33,290: INFO/MainProcess]
Received task: tasks.add[4b933116-3a07-4633-99cb-15f5448bb738]
[2017-05-04 17:43:34,726: INFO/PoolWorker-2]
Task tasks.add[4b933116-3a07-4633-99cb-15f5448bb738] succeeded in 0.000915601s: 3
Ejemplos
de
uso
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)
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//')
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()))
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()
Tareas
periódicas
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),
},
}
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.
Tricks
&
Tips
Reintentar tarea
Reintentar tareas bajo excepciones controladas.
@app.task(bind=True)
def send_twitter_status(self, oauth, tweet):
try:
twitter = Twitter(oauth)
twitter.update_status(tweet)
except (Twitter.FailWhaleError, Twitter.LoginError) as exc:
raise self.retry(exc=exc)
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)
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)
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)
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
Unit tests
Aislar tests de las tareas.
Para probar integración, forzar sincronía.
CELERY_ALWAYS_EAGER = True
Monitorización
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
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
Monitorización desde Flower
Monitor a tiempo real desde interfaz.
$ pip install flower
$ celery -A proj flower
Monitorización desde Flower
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
acabar.delay()
¡gracias!

Más contenido relacionado

Similar a No hagas ahora lo que puedes dejar para otro momento (Celery)

Balancedelinea 101031201811-phpapp02
Balancedelinea 101031201811-phpapp02Balancedelinea 101031201811-phpapp02
Balancedelinea 101031201811-phpapp02
RadioShack
 
5.instrucciones de control en java parte2
5.instrucciones de control en java parte25.instrucciones de control en java parte2
5.instrucciones de control en java parte2
Ramiro Estigarribia Canese
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
BenjaminIsraelLlacta
 
Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)
Iran Reyes Fleitas
 
5.instrucciones de control en c++ parte 2
5.instrucciones de control en c++  parte 25.instrucciones de control en c++  parte 2
5.instrucciones de control en c++ parte 2
Ramiro Estigarribia Canese
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
Ramiro Estigarribia Canese
 
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesUsando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
Martín Volpe
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
Víctor Bolinches
 
Presentación 09 Cajas blanca
Presentación 09 Cajas blancaPresentación 09 Cajas blanca
Presentación 09 Cajas blanca
Andres Bedoya Tobon
 
Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2
josegmay
 
10 ejercicios resueltos en cpp
10 ejercicios resueltos en cpp10 ejercicios resueltos en cpp
10 ejercicios resueltos en cpp
José Antonio Sandoval Acosta
 
Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)
Rafael Bermúdez Míguez
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
Paradigma Digital
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
Gabriela Bosetti
 
Ayudantia sistemas
Ayudantia sistemasAyudantia sistemas
Ayudantia sistemas
Andrea Ampuero
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
Adolfo Sanz De Diego
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
Luis Fernando Aguas Bucheli
 
Hablemos de promesas
Hablemos de promesasHablemos de promesas
Hablemos de promesas
Nicolas Quiceno Benavides
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
José Ricardo Tillero Giménez
 

Similar a No hagas ahora lo que puedes dejar para otro momento (Celery) (20)

Balancedelinea 101031201811-phpapp02
Balancedelinea 101031201811-phpapp02Balancedelinea 101031201811-phpapp02
Balancedelinea 101031201811-phpapp02
 
5.instrucciones de control en java parte2
5.instrucciones de control en java parte25.instrucciones de control en java parte2
5.instrucciones de control en java parte2
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)Getting deeper with TPL & async (Spanish version)
Getting deeper with TPL & async (Spanish version)
 
5.instrucciones de control en c++ parte 2
5.instrucciones de control en c++  parte 25.instrucciones de control en c++  parte 2
5.instrucciones de control en c++ parte 2
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantesUsando Twisted para hacer aplicaciones de escritorio no bloqueantes
Usando Twisted para hacer aplicaciones de escritorio no bloqueantes
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Presentación 09 Cajas blanca
Presentación 09 Cajas blancaPresentación 09 Cajas blanca
Presentación 09 Cajas blanca
 
Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2
 
10 ejercicios resueltos en cpp
10 ejercicios resueltos en cpp10 ejercicios resueltos en cpp
10 ejercicios resueltos en cpp
 
Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)Dart como alternativa a TypeScript (Codemotion 2016)
Dart como alternativa a TypeScript (Codemotion 2016)
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Ayudantia sistemas
Ayudantia sistemasAyudantia sistemas
Ayudantia sistemas
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
6-Unidad 1. Paradigma de la Programación-Orientación a Objetos
 
Hablemos de promesas
Hablemos de promesasHablemos de promesas
Hablemos de promesas
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 

Último

computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
Paola De la Torre
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
ranierglez
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Festibity
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
yuberpalma
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
cecypozos703
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
codesiret
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
Manuel Diaz
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
AngelCristhianMB
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
gisellearanguren1
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
giampierdiaz5
 

Último (20)

computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
Flows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos FeaturesFlows: Mejores Prácticas y Nuevos Features
Flows: Mejores Prácticas y Nuevos Features
 
Modo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdfModo test refrigeradores y codigos de errores 2018 V2.pdf
Modo test refrigeradores y codigos de errores 2018 V2.pdf
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
 
625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf625204013-64-Camino-a-----La-Lectura.pdf
625204013-64-Camino-a-----La-Lectura.pdf
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
El uso de las TIC por Cecilia Pozos S..pptx
El uso de las TIC  por Cecilia Pozos S..pptxEl uso de las TIC  por Cecilia Pozos S..pptx
El uso de las TIC por Cecilia Pozos S..pptx
 
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
Infografia TCP/IP (Transmission Control Protocol/Internet Protocol)
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Programming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdfProgramming & Artificial Intelligence ebook.pdf
Programming & Artificial Intelligence ebook.pdf
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDADEXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
EXAMEN DE TOPOGRAFIA RESUELTO-2017 CURSO DE UNIVERSIDAD
 
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANOREVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
REVISTA TECNOLOGICA PARA EL DESARROLLO HUMANO
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdf
Presentación Seguridad Digital Profesional Azul Oscuro (1).pdfPresentación Seguridad Digital Profesional Azul Oscuro (1).pdf
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.
  • 10. Introducción Instalar: Definir tarea en fichero tasks.py: $ pip install celery from celery import Celery app = Celery('tasks', broker='pyamqp://guest@localhost//') @app.task def add(x, y): return x + y Broker Cola Tarea
  • 11. Introducción Lanzar workers: $ celery -A tasks worker --loglevel=info
  • 12. Introducción Llamar a la tarea: Celery logs In [1]: from tasks import add In [2]: add(2, 1) Out[2]: 3 In [3]: add.delay(2, 1) Out[3]: <AsyncResult: 4b933116-3a07-4633-99cb-15f5448bb738> [2017-05-04 17:43:33,290: INFO/MainProcess] Received task: tasks.add[4b933116-3a07-4633-99cb-15f5448bb738] [2017-05-04 17:43:34,726: INFO/PoolWorker-2] Task tasks.add[4b933116-3a07-4633-99cb-15f5448bb738] succeeded in 0.000915601s: 3
  • 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.
  • 22. Reintentar tarea Reintentar tareas bajo excepciones controladas. @app.task(bind=True) def send_twitter_status(self, oauth, tweet): try: twitter = Twitter(oauth) twitter.update_status(tweet) except (Twitter.FailWhaleError, Twitter.LoginError) as exc: raise self.retry(exc=exc)
  • 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
  • 31. Monitorización desde Flower Monitor a tiempo real desde interfaz. $ pip install flower $ celery -A proj flower
  • 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

Notas del editor

  1. Delay se parece más a una función normal, más comodo si no quieres indicar parametros de ejecución
  2. Usar rpc como como backend no es buena idea, mejor redis
  3. .s() es un signature, una forma de envolver los parametros para pasarlos a otra función