| Author: Eduardo Enriquez

Celery: c贸mo asegurarse de ejecutar de a una sola tarea a la vez. Ensuring a task is only executed one at a time

Celery

En el ecosistema python, se suele utilizar Celery para correr tareas de manera as铆ncrona. Celery no solo permite tomar tareas de una cola (queue) y ejecutarlas asincronamente sino que tambi茅n soporta que las tareas puedan ser ejectudas con periodicidad. Celery soporta nativamente varios framework: Django, Flask, Pyramid, Tornado y algunos m谩s.聽

Para usarlo es muy facil, solo hace falta instalarlo聽

pip install -U Celery

y elegir un broker que usualmente pueden ser聽聽RabbitMQ o Redis.聽聽La documentaci贸n para instalar y configurar con alguno de estas opciones es sencilla y la pueden seguir aqu铆.

Mutex: como bloquear el acceso a un recurso para evitar simultaneas modficaciones con celery

Muchas veces cuando ejecutamos tareas peri贸dicas (periodic tasks) no queremos que algunas se ejecuten en paralelo porque 1) quiz谩s una o m谩s tareas聽quieren modificar algo (puede ser聽la base de datos)聽 al mismo tiempo o 2) varias tareas quieren realizar algo de manera repetida o duplicada por ejemplo, pero hay muchos mas ejemplos. Por esto es muy com煤n usar algun especie de bloqueo para que solo una tarea puede ejecutarse a la vez.

Asi lo recomienda hacer la documentacion oficial de celery:聽Ensuring a task is only executed one at a time聽pero el codigo que Celery proporciona usa un context manager y la memcache.聽

Primer decorador:聽https://gist.github.com/eduzen/6db2abbb9b9fcc16683f3d7f3bfebfba

Fuentes:

http://loose-bits.com/2010/10/distributed-task-locking-in-celery.html

Related Posts