//barrabarra

JAVIER ROMERO
Programación web y escritorio
 

Our blog, keeping you up-to-date on our latest news.

 

De celery beat, multiples workers/colas y tareas programadas

noviembre 21, 2013 at 1:48 pm | Django | No comment

 

Desde hace algunos días vengo investigando por qué unas tareas programadas (periodic task) en django-celery no se estaban lanzando, aunque al comprobar el log de celery beat quedaba claro que se estaban recuperando correctamente desde las tablas de tareas programadas.

Se da la situación de que en nuestro sistema tenemos un par de workers distintos para controlar la concurrencia con el tamaño de las colas.
El worker por defecto tiene una cola de 8 elementos y tenemos otro de 1.
Resumiendo mucho, al declarar la tarea el codigo es tal que así:


@task(queue="socialmessages_1slot")
def task_send_pending_messages():
...

y para que la tarea periódica se enrute bien hacia el worker secundario con un único slot que maneja la cola “socialmessage_1slot”, hay que incluir el nombre de la cola al crear la tarea periódica en la administración de Django (en el bloque Execution options).

Con esto celery beat enruta correctamente la tarea al worker que le corresponde.
Me parece curioso este comportamiento porque no ocurre lo mismo con otras tareas que tienen igualmente declarada su cola que es manejada por el worker por defecto. Igual es un error porque esto que apunto ocurre con la version 3.0.23 y no con la más actual :-/

 

Categorias:

Archivo: