2012-02-06 2 views
15

È possibile impostare la concorrenza (il numero di lavoratori simultanei) su un livello per attività in Celery? Sto cercando qualcosa di più raffinato che CELERYD_CONCURRENCY (che imposta la concorrenza per l'intero daemon).Celery: limiti di concorrenza per attività (numero di lavoratori per attività)?

Lo scenario di utilizzo è: ho un singolo celerlyd che esegue diversi tipi di attività con caratteristiche di prestazione molto diverse: alcune sono veloci, altre molto lente. Per alcuni vorrei fare il maggior numero possibile il più velocemente possibile, per altri vorrei assicurarsi che solo una istanza sia in esecuzione in qualsiasi momento (ad esempio, la concorrenza di 1).

risposta

25

È possibile utilizzare automatic routing per instradare le attività su code diverse che verranno elaborate da operatori di sedani con diversi livelli di concorrenza.

celeryd-multi inizio veloce lento -c: slow 3 -c: veloci 5

Questo comando avvia 2 lavoratori sedano ascolto veloce e lenti code con 3 e 5 livelli di concorrenza, rispettivamente, .

CELERY_ROUTES = { "tasks.a": { "coda": "lento"}, "tasks.b": { "coda": "veloce"}}

I compiti con tipo tasks.a verrà elaborato da lento code e tasks.b attività entro veloce coda, rispettivamente.

+1

Grazie 0x00mh. Quindi posso definire la concorrenza sulle code, ma non sulle attività. E credo che questo significhi che sto iniziando diversi demoni di sedani. Quindi immagino che questo significhi che non c'è modo di impostare la concorrenza per-task senza usare un demone separato? – Parand

+0

CELERYD_CONCURRENCY definisce il numero di processi (processi di lavoro) da avviare. I processi di lavoro consumano i messaggi dal broker in modo indipendente. Il messaggio contiene il nome dell'attività da eseguire. – mher