J'ai un tas de demandes Django qui exécute des calculs mathématiques (écrit en C et exécuté par un module Cython) qui peut prendre une quantité indéterminée (de l'ordre de 1 seconde) de temps à exécuter. De plus, les requêtes n'ont pas besoin d'accéder à la base de données et sont toutes indépendantes les unes des autres et de Django.Django traitement asynchrone
À l'heure actuelle tout est synchrone (en utilisant Gunicorn avec sync
types de travailleurs), mais je voudrais faire de ce asynchrone et non bloquant. En bref, je voudrais faire quelque chose:
- Recevoir la demande AJAX
- Allouer tâche à un travailleur disponible (sans bloquer la principale application web Django)
- travailleur exécute la tâche dans une certaine quantité de temps inconnue
- Django renvoie le résultat du calcul (une liste de chaînes) comme JSON chaque fois que la tâche est terminée
Je suis très nouveau à Django asynchrone, et donc ma question est quelle est la meilleure pile fo r faisant ceci.
Est-ce ce genre de processus quelque chose d'une file d'attente des tâches est bien adapté pour? Quelqu'un pourrait-il recommander Tornado + Céleri + RabbitMQ, ou peut-être autre chose?
Merci d'avance!
Que faites-vous avec les résultats des calculs? – sdolan
Renvoyez le résultat (en JSON) au navigateur de l'utilisateur. –