dev @ Flyers Concierge Charla inspirada en la de Martin Alderete, pyconar 2014 PyCon Ar 2014 - Martín Alderete - Trabajando de forma asíncrona en Django / Python
pero ... ¿Que es un framework web? Conjunto de herramientas que ayudan a desarrollar un sitio con mayor rapidez y robustez. Entre ellas: – ORM – Plantillas – Router – Caching – Logging – Autenticación – Permisos – Traducciones – Admin – Mucho mas ... Para mas info de django: https://www.djangoproject.com/
complete, stable, durable and easy to install. It’s an excellent choice for a production environment. Redis is also feature- complete, but is more susceptible to data loss in the event of abrupt termination or power failures. Detailed information about using Redis
Permite distribuir el sistema. • Permite la intercomunicación entre tecnologías. • Permite escalar. Desventajas: • Agrega complejidad al stack. • Necesita mantenimiento. • Dificultad para debugear.
y confiable para procesar grandes cantidades de mensajes, al tiempo que proporciona a las operaciones y las herramientas necesarias para mantener dicho sistema. Es una cola de tareas que se enfoca en el procesamiento en tiempo real y, al mismo tiempo, admite la programación de tareas.
fácilmente con múltiples servicios, con algo de azúcar sintáctico. Es una forma de lanzar servicios viéndolos como tareas. – RabbitMQ o Redis: sistema de comunicaciones. – AMQP(advance message queuing protocol): como protocolo. – Kombu: Libreria de mensajes en python. Provee una interfaz de alto nivel para el protocolo AMQ.
aplicación celery. • Es una clase que puede crear a partir de cualquier callable. • Tiene dos funciones principales: – Definir que sucede cuando se la llama (se enviá un mensaje) – Definir que sucede cuando se la recibe (un worker recibe un mensaje) • Tienen un nombre único. • Por convención van en un modulo tasks.py adentro de un app de django.
medio de decoradores: – @app.task: define una tarea en una app especifica – @shared_task: define una tarea sin depender de una app especifica. • Posee opciones que cambian la manera de ejecutarse: – name = None – queue = “celery” – max_retries = 3 – default_retry_delay = 180 (segundos) – rate_limit = None (cant. de tareas por periodo de tiempo) – time_limit = None – ignore_result = False
AsyncResult el cual guarda el resultado de la ejecución una tarea. Donde lo guarda? En un backend. Para esto es necesario configurar en settings: CELERY_RESULT_BACKEND • Backends disponibles: redis, amqp, memcached, django orm, etc.
celery, se puede configurar en settings o en el admin de django. Básicamente lo que se hace es elegir una tarea de las que creaste y decir cada cuanto tiempo se tiene que ejecutar o a que hora se tiene que ejecutar. Hay ejemplos en el código y lo voy a estar mostrando.
mas completo • Monitoreo en tiempo real – Progreso de tareas e historial – Detalles de tareas – Gráfica y estadísticas • Control remoto – Estado de los workers y estadísticas – Reiniciar y apagar workers – Ver tareas programada(ETA/countdown) – Ver tareas que se ejecutan actualmente – Revocar o terminar tareas – Monitorear broker • HTTP API • Autenticación