Bonjour,
Un service externe fait appel à une API de type REST exposée par une application Django REST Framework qui joue le rôle de backend. Voici comment on veut gérer ces appels dans un contexte spécifique.
- Le service lance parallèlement plusieurs appels au même service Web (c-à-d à une même URL) et se met en attente de la réponse à ces requêtes (appels synchrones donc).
- Le backend, réceptionnant ces requêtes, doit les classer en groupes de tâches. Dans chaque groupe, les tâches doivent être exécutées les unes à la suite des autres. En revanche, les groupes doivent être lancés simultanément.
- Comme on ne sait pas à l’avance quelles sont les tâches que va comporter un groupe, il faut pouvoir ajouter des tâches à un groupe déjà existant à l’exécution (ou de manière dynamique).
Après quelques recherches, j’ai choisi d’utiliser Celery pour répondre à ce besoin. Je suis cependant dans une impasse.
- En regardant la documentation, la primitive
chain
semblait parfaitement correspondre au concept de groupe de tâches séquentielles. Cependant, je ne vois pas comment je peux ajouter dynamiquement / à l’exécution de tâches à une chaine pré-existante. - En outre, je suis parti sur l’idée qu’il y aurait 1 worker par service Web exposé. Du coup, une file de tâches n’est traitée que par 1 seul worker. Le problème, c’est que les files sont groupées selon le service Web mais aussi un identifiant métier supplémentaire. Cela signifie que pour un service Web, il y a plusieurs files correspondant à un groupe métier différent.
- Je précise que côté Celery, j’ai activé le protocole RPC avec RabbitMQ pour récupérer les résultats des tâches qui doivent être renvoyés au service appelant.
En conséquence, je me pose premièrement la question de savoir si Celery est le bon outil pour répondre à mon besoin. Si oui, comment résoudre les problèmes décrits plus hauts ? Si non, quel outil Python est adapté à ce problème ?
+0
-0