2011-09-17 18 views
8

Sto tentando di implementare uno scenario seguente con Celery: due code di (stesse) attività a esecuzione prolungata, una per "normale" e la altro per priorità "inattiva".Implementazione di code di priorità "inattiva" e "normale" per attività a esecuzione prolungata in Celery

Farei in modo che i lavoratori controllino entrambe le code e prendano prima le attività dalla coda di priorità "normale" e, se è vuota, prenderebbero i compiti dalla priorità "inattiva".

La mia domanda è: è possibile garantire l'ordine in cui i lavoratori controlleranno le loro code di incarichi? Inoltre, questo è l'approccio giusto per implementare le priorità?

Sfondo: le attività eseguono processi di transcodifica ffmpeg. Le "normali" priorità sarebbero i nuovi video in arrivo (che devono essere trascodificati al più presto) e la priorità "idle" sarebbe il compito di ricodificare il vecchio archivio (40.000+ video) in impostazioni di formato aggiornate. Non ho molti server disponibili per l'invio di attività multi-server.

risposta

1

Secondo la teoria che i lavoratori inattivi non consumano molte risorse di sistema, ho implementato due priorità con un secondo scambio, un secondo gruppo di code e un secondo gruppo di lavoratori. Non ho processi di lavoro così intensi, quindi non faccio in modo che il mio secondo set di lavoratori si acceleri quando il primo set è attivo, ma è possibile che il comando di renice UNIX funzioni per questo.

Probabilmente si potrebbe anche fare qualcosa con una coda di controllo in modo che non sia sufficiente che i lavoratori ricevano una richiesta di lavoro, inoltre devono ottenere un token da una coda di controllo. Quindi si sputa un piccolo numero di token nella coda di controllo inattiva, ma un numero maggiore di token nella normale coda di controllo.

Problemi correlati