Ich erstelle einen Web-Service für die iterative Stapelverarbeitung von Daten mit CherryPy. Der ideale Workflow ist wie folgt:So geben Sie Daten von einer CherryPy BackgroundTask zurück, die so schnell wie möglich ausgeführt wird
- Benutzer POST-Daten an den Dienst für die Verarbeitung
- Wenn die Verarbeitung Job frei ist, sammelt er die Daten in der Warteschlange und startet eine weitere Iteration
- Während die Auftragsbearbeitung ist, Benutzer Weitere Daten werden an die Warteschlange für die nächste Iteration gesendet.
- Sobald die aktuelle Iteration abgeschlossen ist, werden die Ergebnisse zurückgegeben, sodass Benutzer sie mit der gleichen API abrufen können.
- Der Job beginnt erneut mit dem nächsten Stapel von Daten in der Warteschlange.
Die wichtige Überlegung dabei ist, dass die Verarbeitung so schnell wie möglich ausgeführt werden soll, sobald die vorhergehenden beendet ist, unabhängig von der Datenmenge in der Warteschlange bei jeder Iteration zu starten. Es gibt keine obere Grenze für die Dauer der einzelnen Iterationen, daher kann ich keinen festen Zeitplan für die Ausführung erstellen.
Es gibt einige Beispiele für die Verwendung BackgroundTask
(like this one), aber ich habe noch zu finden, die mit der Rückkehr Daten umgehen, oder eine, die so schnell wie möglich behandelt mit Aufgaben laufen im Gegensatz zu einem festen Zeitplan.
Ich bin nicht verheiratet mit der BackgroundTask
Lösung, also wenn jemand eine Alternative anbieten kann, wäre ich mehr als glücklich. Es fühlt sich an, als gäbe es eine Lösung innerhalb des Rahmens.
Große Antwort, danke! Am Ende habe ich es mit einer ähnlichen Architektur gehackt, aber nicht annähernd so sauber wie du es getan hast. Ich habe weder von Sellerie noch von RQ gehört, aber ich werde in Zukunft nach ihnen suchen. – Mourndark