2010-07-31 17 views
9

Sto eseguendo Django con Celery su RabbitMQ come coda per gestire alcune attività di elaborazione dati. Sto dando il via ai compiti di sedano quando un utente si registra per la prima volta e periodicamente per aggiornare i propri dati. Tuttavia, vorrei ovviamente dare la priorità alle attività che eseguono gli utenti che sono attualmente online. Ho notato che c'era una priorità per le attività in sedano, ma sembra che rabbitmq non supporti questo. Questo thread http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e suggerisce due code diverse, una alta prioritaria e una bassa priorità, o l'impostazione di un limite di velocità per le attività con priorità più bassa.Soluzione alternativa per la priorità delle attività di celery su RabbitMQ?

Qualcuno ha una buona soluzione per implementare la priorità? Grazie in anticipo!

risposta

2

Oltre a questo, si può spingere a compiti urgenti alcune code (diciamo la coda urgente) e impostiamo le priorità dei consumatori, ovvero lascia che tutti i consumatori riprendano l'attività dalla coda urgente con priorità elevata.

https://github.com/celery/celery/issues/3098

Alla fine del consumatore, è possibile definire argomento x priorità nelle code per consumare da. Nell'esempio qui sotto, consumatore ritira attività dalla coda di sedano con priorità 0 e da hipri con priorità 10.

Esempio:

CELERY_QUEUES = (
    Queue('celery', Exchange('celery', type='direct'), routing_key='celery', 
      consumer_arguments={'x-priority': 0}), 
    Queue('hipri', Exchange('hipri', type='direct'), routing_key='hipri', 
      consumer_arguments={'x-priority': 10}), 
) 
Problemi correlati