[pyar] Tareas periódicas
Manuel Kaufmann
humitos en gmail.com
Sab Oct 31 02:47:56 ART 2015
Hola a todos,
Estoy pensando un problema que no estoy pudiendo resolver. No se me
ocurre cómo encararlo.
Tengo varias tareas (definidas en un archivo YAML) que deben correr
periódicamente, pero con algunas restricciones.
Estoy usando Celery Beat para manejar las tareas. El problema que tengo
es "cómo generar esos períodos aplicando las restricciones", básicamente.
Consideraciones de la estructura:
* Las tareas están organizadas en CATEGORY y SUB-CATEGORY.
* Las tareas tiene los siguientes datos:
- content -> unicode
- date -> datetime o unicode (daily, weekly, monthly)
- strict -> boolean
- category -> unicode
- subcategory -> unicode
Reglas:
* Las tareas que tengan "date -> datetime" deben ejecutarse sin
ninguna restricción
* Las tareas que estén dentro de la *misma* CATEGORY y SUBCATEGORY y
tengan el mismo "date -> unicode" (daily, weekly, monthly) se deben
ejecutar de forma intercalada en ese período.
- Ejemplo: si tengo 7 Task que cumplen estas condiciones, su período
se multiplica por 7. Suponiendo que fuese weekly, la primera se ejecuta
la semana que viene, y luego dentro de 7 semanas por segunda vez.
* Las tareas que tengan "strict -> True" deben ejecutarse de acuerdo a
lo que diga "date -> unicode" sin importar si están dentro de una misma
CATEGORY y SUBCATEGORY que comparta el "date -> unicode" (daily, weekly,
etc)
Ejemplo:
Task1:
category: A
subcategory: A
date: weekly
content: Task1
Task2:
category: A
subcategory: A
date: weekly
content: Task2
Task3:
category: A
subcategory: B
date: weekly
content: Task3
Task4:
category: B
subcategory: C
date: 2015-11-01 00:32
content: Task4
Esto debe ejecutar:
- mañana la Task4 a las 00:32
- la primera semana la Task1 y Task3
- la segunda semana la Task2 y Task3
La forma de generar una Task para Celery es usando los argumentos de la
función "crontab()":
http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#crontab-schedules
Ejemplo para la Task4:
crontab(hour=0, minute=32, day_of_month=1, month_of_year=10)
Necesito encontrar "la magia" de la sintaxis loca de esa función para
poder generar las Tasks de la forma que necesito: "periódica bajo
ciertas reglas"
No se me ocurre como resolverlo -al menos a estas horas.
¿Me dan una mano?
--
Kaufmann Manuel
-- http://elblogdehumitos.com.ar/
More information about the pyar
mailing list