2012-02-06 17 views
15

¿Es posible establecer la concurrencia (el número de trabajadores simultáneos) en un nivel por tarea en Celery? Estoy buscando algo más refinado que CELERYD_CONCURRENCY (que establece la concurrencia para todo el daemon).Apio: por límites de concurrencia por tarea (# de trabajadores por tarea)?

El escenario de uso es el siguiente: tengo un único celerlyd ejecutando diferentes tipos de tareas con características de rendimiento muy diferentes, algunas son rápidas, otras muy lentas. Para algunos, me gustaría hacer todos los que pueda tan rápido como pueda, para otros me gustaría asegurarme de que solo se ejecute una instancia en cualquier momento (es decir, concurrencia de 1).

Respuesta

25

Puede usar automatic routing para enrutar tareas a diferentes colas que serán procesadas por trabajadores de apio con diferentes niveles de concurrencia.

celeryd multi-arranque rápido -c lenta: lenta 3 -c: Fast 5

Este comando lanzamientos de 2 trabajadores apio escucha rápida y lenta colas con 3 y 5 niveles de concurrencia, respectivamente .

CELERY_ROUTES = { "tasks.a": { "cola": "lento"}, "tasks.b": { "cola": "rápida"}}

Las tareas con tareas tipo.a se procesarán por lento tareas de cola y tareas.b por cola rápida respectivamente.

+1

Gracias 0x00mh. Entonces puedo definir concurrencia en colas, pero no en tareas. Y creo que esto significa que estoy comenzando múltiples demonios de apio. ¿Entonces supongo que eso significa que no hay forma de establecer la concurrencia por tarea sin usar un daemon por separado? – Parand

+0

CELERYD_CONCURRENCY define cuántos procesos (procesos de trabajo) se deben iniciar. Los procesos de trabajo consumen mensajes del intermediario de forma independiente. El mensaje contiene el nombre de la tarea para ejecutar. – mher

Cuestiones relacionadas