write traductor traducir significa qué quiere ingles gratis frases español diccionario decir buscar scheduled-tasks celery celeryd

scheduled-tasks - traducir - traductor de frases en ingles a español gratis



¿Cómo un trabajador de apio que consume múltiples colas decide cuál consumir primero? (2)

Estoy usando Celery para realizar tareas en segundo plano asíncronas, con Redis como backend. Estoy interesado en el comportamiento de un trabajador de apio en la siguiente situación:

Estoy ejecutando un trabajador como un demonio usando celeryd . A este trabajador se le han asignado dos colas para consumir a través de la opción -Q :

celeryd -E -Q queue1,queue2

¿Cómo decide el trabajador dónde obtener la próxima tarea para consumir? ¿Consume aleatoriamente una tarea de la queue1 o la queue2 ? ¿Priorizará la queue1 de la queue1 porque está primero en la lista de argumentos pasados ​​a -Q ?


Desde mis pruebas, procesa múltiples colas al estilo round-robin .

Si utilizo este código de prueba:

from celery import task import time @task def my_task(item_id): time.sleep(0.5) print(''Processing item "%s"...'' % item_id) def add_items_to_queue(queue_name, items_count): for i in xrange(0, items_count): my_task.apply_async((''%s-%d'' % (queue_name, i),), queue=queue_name) add_items_to_queue(''queue1'', 10) add_items_to_queue(''queue2'', 10) add_items_to_queue(''queue3'', 5)

Y comience la cola con (usando django-celery):

`manage.py celery worker -Q queue1,queue2,queue3`

Produce:

Processing item "queue1-0"... Processing item "queue3-0"... Processing item "queue2-0"... Processing item "queue1-1"... Processing item "queue3-1"... Processing item "queue2-1"... Processing item "queue1-2"... Processing item "queue3-2"... Processing item "queue2-2"... Processing item "queue1-3"... Processing item "queue3-3"... Processing item "queue2-3"... Processing item "queue1-4"... Processing item "queue3-4"... Processing item "queue2-4"... Processing item "queue1-5"... Processing item "queue2-5"... Processing item "queue1-6"... Processing item "queue2-6"... Processing item "queue1-7"... Processing item "queue2-7"... Processing item "queue1-8"... Processing item "queue2-8"... Processing item "queue1-9"... Processing item "queue2-9"...

Así que extrae un elemento de cada cola antes de pasar al siguiente elemento de la cola1, aunque TODAS las tareas de la cola1 se publicaron antes de las tareas de la cola2 y 3.

Nota: Como lo señaló @WarLord, este comportamiento exacto solo funcionará cuando CELERYD_PREFETCH_MULTIPLIER esté configurado en 1. Si es mayor que 1, eso significa que los elementos se recuperarán de la cola en lotes . Entonces, si tiene 4 procesos con el PREFETCH_MULTIPLIER configurado en 4, eso significa que habrá 16 elementos extraídos de la cola de inmediato, por lo que no obtendrá el resultado exacto que el anterior, pero aún así seguirá aproximadamente el round-robin .


NOTA: Esta respuesta ha quedado en desuso: la última versión de Celery funciona de manera muy diferente a la de 2013 ...

Un trabajador que consume varias colas consume tareas, el orden FIFO también se mantiene en varias colas.

Ejemplo:

Cola1: (t1, t2, t5, t7)
Cola2: (t0, t3, t4, t6)

Suponiendo que 0-7 representa el orden de las tareas publicadas

El orden de consumo es t0, t1, t2, t3, t4, t5, t6, t7