2014-08-28 4 views
0

J'ai 4 travailleurs de céleri chacun de 6.Céleri: Assurez-vous que les travailleurs ne sont pas en cours d'exécution emplois seulement d'un utilisateur

concurrency

Je les utilisateurs de soumettre nombre variable d'emplois (de 1 à 20). Comment puis-je m'assurer que le travail de chaque utilisateur obtient un temps de traitement égal et que le travail d'un utilisateur ne remplit pas la file d'attente forçant les autres travaux de l'utilisateur à attendre.

Je crains que si les travailleurs se retrouvent en passant par tous les travaux soumis par le premier utilisateur, les travaux en attente de l'autre utilisateur doit attendre premier utilisateur pour terminer, un inconvénient.

Y at-il un moyen de rendre les travailleurs de céleri au courant des travaux d'un utilisateur détenant des emplois en attente d'un autre utilisateur. Au lieu de cela, puis-je exécuter un maximum d'un travail de chaque utilisateur à un moment donné?

J'ai une file d'attente à laquelle je soumets tous les travaux de l'utilisateur, aurais-je besoin de faire une file d'attente pour chaque utilisateur et avoir une stratégie circulaire pour tirer un travail de la file d'attente de chaque utilisateur?

Répondre

0

Au moment Celery doesn't support priority queues.

Faire une file d'attente pour chaque utilisateur et les programmer en fonction de l'algorithme round-robin semble être beaucoup de travail.

Une façon simple de résoudre votre problème est de créer une table temporaire & stocker les détails de la tâche d'arrivée. Envoyer la première tâche reçue au céleri. Au moment où il est terminé, vous pourriez avoir reçu beaucoup de tâches de divers utilisateurs. Maintenant, basé sur l'ID de l'utilisateur, terminé les tâches & tâches inachevées, vous pouvez envoyer plus de tâche appropriée à céleri pour l'exécution.

+0

c'est ce que j'ai fini par faire oui – user299709

Questions connexes