2017-09-13 5 views
7

Nous utilisons céleri pour nos tâches d'arrière-plan asynchrones et nous avons 2 files d'attente pour différentes tâches prioritaires. Nous avons 2 groupes de nœuds les servant séparément. Les choses fonctionnent bien comme prévu.Prioriser les files d'attente parmi plusieurs files d'attente dans le céleri?

Question:

Nous recevons souvent faibles tâches prioritaires. Pour l'optimisation de l'utilisation des ressources, je me demande s'il existe un moyen de configurer les travailleurs (en écoutant la file d'attente haute priorité) pour écouter les deux files d'attente. Mais prendre des emplois de la file d'attente plus prioritaire tant qu'il y a du travail? et repli sur la file d'attente basse priorité sinon.

J'ai suivi la planification de tâches basée sur la priorité discutée @Celery Task Priority. Mais mes questions donnent la priorité aux files d'attente et pas seulement aux tâches dans une file d'attente.

Répondre

1

Vous pouvez partiellement y parvenir en définissant plusieurs files d'attente pour le worker, au démarrage.

Vous pouvez le faire avec la commande suivante: Consultez également here pour plus de détails.

celery -A proj worker -l info -Q Q1,Q2 

Bien que cette approche présente un problème. Il ne le fait pas avec une approche de repli. Depuis, les travailleurs écoutant plusieurs files d'attente répartissent également les ressources entre eux.

Par conséquent, votre exigence de traiter uniquement à partir de la «file d'attente haute priorité» même lorsqu'il y a quelque chose dans la «file d'attente prioritaire normale» ne peut pas être obtenue. Ceci peut être minimisé en allouant plus de Travailleurs (75%) pour les 'files d'attente à haute priorité' et 25% pour les 'files d'attente prioritaires normales'. ou une part différente en fonction de votre charge de travail.

0

Malheureusement, ce n'est pas possible avec le céleri hors de la boîte.

Une solution optimale consiste à démarrer 2 travailleurs. 1 pour priorité basse et autre pour priorité élevée avec n processus.

Lorsqu'il n'y a pas de tâches à priorité élevée, le travailleur avec des tâches à faible priorité utilisera toutes les ressources et vice versa. S'il y a les deux tâches, les ressources seront réparties uniformément.

+0

Cela peut être une solution. Je vais essayer . –