Ich habe eine Reihe von Django-Anfragen, die einige mathematische Berechnungen ausführt (in C geschrieben und über ein Cython-Modul ausgeführt), die eine unbestimmte Menge (in der Größenordnung von 1 Sekunde) Zeit zur Ausführung nehmen kann. Außerdem müssen die Anfragen nicht auf die Datenbank zugreifen und sind alle unabhängig voneinander und von Django.
Im Moment ist alles synchron (mit Gunicorn und sync
Worker-Typen), aber ich möchte dies asynchron und nicht blockierend machen. Kurz gesagt, ich würde gerne etwas tun:
- Empfangen der AJAX-Anfrage
- Zuweisung der Aufgabe an einen verfügbaren Worker (ohne Blockierung der Haupt-Django-Webanwendung)
- Worker führt Aufgabe in einer unbekannten Zeitspanne aus
- Django gibt das Ergebnis der Berechnung (eine Liste von Strings) als JSON zurück, sobald die Aufgabe abgeschlossen ist
Ich bin sehr neu zu asynchronen Django, und so meine Frage ist, was ist der beste Stack für tun dies.
Ist diese Art von Prozess etwas, wofür sich eine Aufgabenwarteschlange gut eignet? Würde jemand Tornado + Celery + RabbitMQ oder vielleicht etwas anderes empfehlen?
Vielen Dank im Voraus!