2011-01-30 3 views
4

J'utilise Django avec Celery + RabbitMQ pour créer des tâches de conversion vidéo de vidéos téléchargées par les utilisateurs. Now I know how to query celery to get the status. Ma question est de savoir où sauvegarder le task_id associé à chaque tâche, dois-je l'enregistrer dans les modèles ou dans le cache de django?La meilleure façon d'interroger Céleri en utilisant AJAX depuis le front-end pour savoir si une tâche créée est terminée ou non?

Je sais que des questions similaires ont été posées dans le passé, par ex. this stackoverflow question mais il n'y a pas encore de réponse définitive. Je sais que la réponse à cette question varie selon les préférences du développeur, mais si quelqu'un peut s'informer sur les avantages et les inconvénients de différentes approches, ce sera formidable. Pour réitérer, je vais utiliser le paramètre task_id pour envoyer des requêtes AJAX de temps en temps depuis le frontal pour savoir si la conversion vidéo est terminée ou non.

Répondre

4

renvoie à ma réponse à votre question liée: Test if a celery task is still being processed

Ainsi, après avoir réglé le champ celery_task, vous pouvez définir facilement une vue ajax qui renverrait l'état de la tâche dans un format requis.

+0

Oui, ça sonne plutôt bien. Juste par curiosité, enregistrer un "celery_task" pour le modèle soit de bonne conception étant donné que nous n'utiliserons la tâche qu'une seule fois, juste au moment où nous ferons la conversion vidéo et pas n'importe quand plus tard. Je veux dire que nous utiliserons cette information dans notre modèle seulement une ou deux fois. Mais je suppose que c'est la seule solution saine? – Chantz

+0

En outre, puis-je utiliser JSON au lieu de PickledObjectField()? Vous avez aussi voulu dire l'implémentation de PickledObjectField par django-picklefield. Droite? – Chantz

+0

effectivement je l'ai mis en œuvre pour l'informatique distribuée dans mon projet de concours de codage. Donc, dans ce cas, les résultats, le statut de compilation pour les codes ont été enregistrés dans les tâches, d'où il était nécessaire pour la recherche future. Comment surveilleriez-vous la tâche lorsque vous utilisez JSON. Je veux dire que vous devez sauvegarder l'objet résultat de la tâche de céleri dans le champ pour que les méthodes de vérification du statut soient disponibles pour le futur. – crodjer

8

Si vous avez installé django_celery, vous pouvez interroger des vues telles que task_status ou is_task_successful qui se trouvent dans le package djcelery.views. Ils renvoient un dictionnaire JSON afin que vous puissiez les gérer avec JavaScript.

+1

Je pense que mon problème était plus lié à "comment suivre quelle tâche a été créée pour quel model.object?" Ainsi, par exemple Je peux aller au djcelery.views mais je ne saurais pas quelle "tâche" se rapporte à quel "task_creator". Pour contourner cela, je suis allé avec @crodjer réponse ci-dessus. – Chantz

Questions connexes