[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