2011-09-17 5 views
8

Je tente d'implémenter un scénario suivant avec Celery: deux files d'attente de (même) tâches longues, une pour "normal" et la autre pour la priorité "inactive".Implémentation des files d'attente prioritaires "inactives" et "normales" pour les tâches longues dans Celery

Je ferais en sorte que les travailleurs surveillent les files d'attente et prennent d'abord les tâches de la file d'attente prioritaire "normale" et si elles sont vides, elles prendraient des tâches de la priorité "inactive".

Ma question est: Est-il possible de garantir l'ordre dans lequel les travailleurs vont vérifier leurs tâches files d'attente? Aussi, est-ce la bonne approche pour la mise en œuvre des priorités? Contexte: Les tâches exécutent des tâches de transcodage ffmpeg. Les priorités "normales" sont les nouvelles vidéos arrivant (qui doivent être transcodées le plus vite possible) et la priorité "inactive" est la tâche de re-transcoder les anciennes archives (plus de 40.000 vidéos) en paramètres de format mis à jour. Je n'ai pas plusieurs serveurs disponibles pour effectuer une répartition de tâches multi-serveur.

Répondre

1

Sous la théorie que les travailleurs inactifs ne consomment pas beaucoup de ressources système, j'ai mis en œuvre deux priorités avec un deuxième échange, un deuxième ensemble de files d'attente, et un deuxième ensemble de travailleurs. Je n'ai pas de processus de travail aussi intensifs, donc je ne fais pas en sorte que mon deuxième groupe de travail se ralentisse lorsque le premier jeu est actif, mais la commande UNIX renice pourrait fonctionner pour cela.

Vous pouvez probablement également faire quelque chose avec une file d'attente de contrôle afin que les travailleurs ne reçoivent pas une demande de travail, ils doivent également obtenir un jeton à partir d'une file d'attente de contrôle. Ensuite, vous crachez un petit nombre de jetons dans la file d'attente de contrôle inactif, mais un plus grand nombre de jetons dans la file d'attente de contrôle normale.

Questions connexes