Tengo una aplicación django con celery 4.1.0 y celery beat con el programador de base de datos. Lo que quiero es ejecutar tareas periódicas desde el sitio de administración y establecer el tiempo de vencimiento para cada una de estas tareas. La propiedad expire en PeriodicTask es un programador de tiempo que deja de crear nuevos mensajes para esa tarea pero quiero que la expiración revoque las tareas que están programadas pero son más antiguas que algún valor, p. una hora. ¿como hacer esto?

Estoy realmente confundido con la documentación del apio y las diferencias entre las diferentes versiones.

4
mhk 15 nov. 2017 a las 18:40

2 respuestas

La mejor respuesta

Lo resolví ejecutando una tarea programada que ejecuta una tarea definida con el tiempo de vencimiento deseado:

@shared_task(bind=True, queue='q1', max_retries=3)
def parent_task(self, arg1):
    child_task.apply_async(kwargs={'arg1': arg1}, expires=86400)


@shared_task(bind=True, queue='q1', max_retries=3)
def child_task(self, arg1):
    pass
0
mhk 19 nov. 2017 a las 13:01

Parece que necesita usar un personalizado clase de programador.

0
schillingt 15 nov. 2017 a las 15:54