2016-05-01 1 views
2

J'ai un besoin dans mon projet où le client peut mettre en pause ou reprendre le processus qui sont en attente pas le processus. J'utilise socket web pour afficher les résultats de la tâche céleri, mais en pause/reprise je ne comprends pas comment concevoir le code. Le seul et unique moyen dans mon esprit est de révoquer la tâche dans la demande de pause tout en conservant les données de processus révoqué dans le cache et utilisé ce cache plus tard dans l'API de reprise pour initier à nouveau la tâche de céleri. En utilisant cette approche, mon flux de conception de socket Web est perturbé, car j'ai interrogé l'état de traitement des tâches via websocket et quand il n'y a pas de processus j'ai envoyé un drapeau finish pour fermer la connexion. Pour savoir quelle tâche est en cours de traitement ou en attente, j'ai ajouté une table séparée pour le mappage des tâches et vider cette table lorsque la dernière tâche est exécutée. S'il vous plaît aidez-moi à l'architecte de cette conception sans faille, s'il vous plaît me signaler si j'ai raté quelque chose.Comment faire une pause ou reprendre la tâche de céleri?

Répondre

0

Mauvaise approche. Vous ne devriez jamais mettre en pause ou révoquer le processus manuellement pour obtenir l'état actuel. Les états de pause et de révocation sont plutôt réservés aux erreurs de courtier.

Essayez de reconcevoir votre code.

Le but principal de achive est dans cette phrase

customer can pause or resume process which are pending not the process one

Concevez votre code comme https://en.wikipedia.org/wiki/Workflow_pattern

diviser votre code pour les étapes ou états. Un processus de céleri peut traverser tout le workflow mais ce n'est pas nécessaire par exemple si vous faites beaucoup de requêtes pour beaucoup de fournisseurs externes (une requête = un état). Si l'état de pause du client, alors arrêtez votre processus de céleri. Ajouter un événement qui vérifiera quand l'état passera à actif et réexécutera le nouveau processus de céleri pour cette tâche.

+0

Arrêter le processus de céleri signifie arrêter le travailleur de le consommer? – Shashank

+0

Non, je voulais mettre fin au processus totalement. Lorsque le client presse à nouveau, créez une nouvelle tâche pour ce processus. – ImportError

+0

J'ai exécuté la tâche de tous les clients dans une seule file d'attente, donc chaque fois que le client fait une pause ou reprend, je récupère les identifiants de tâches liés aux clients et les révoque avec l'indicateur vrai de terminaison. C'est ce que je comprends. – Shashank