2016-03-19 9 views
1

ich einen kleinen Webserver mit Flask zu schreiben, die die folgenden Dinge tun muss:Flasche und lange Lauf Aufgaben

  1. Auf der ersten Anfrage, die grundlegende Seite dienen und einen langen Kick-off (15-60 zweite) Datenverarbeitungsaufgabe. Die Datenverarbeitungsaufgabe fragt einen zweiten Server ab, den ich nicht kontrolliere, aktualisiert eine lokale Datenbank und führt dann einige Berechnungen der Ergebnisse durch, die auf der Webseite angezeigt werden.
  2. Die Seite gibt mehrere AJAX-Anforderungen aus, die alle von Teilen des Ergebnisses der langen Aufgabe abhängen, daher muss ich warten, bis die Verarbeitung abgeschlossen ist.
  3. Nachfolgende Anforderungen für die erste Seite im Idealfall wieder verwenden das Ergebnis der vorherigen Anfrage, wenn sie kommen in, während die Verarbeitungsaufgabe im Gange ist (oder sogar kurz danach)

Ich habe versucht, mit Kolben-Cache (speziell SimpleCache) , lief aber auf ein Problem, da es scheint, dass der Cache das Ergebnis in Essig einlegt, wenn ich lieber das genaue Objekt behalten würde.

Ich glaube, ich könnte neu schreiben, was mir die Caching Beize-fähig zu sein, und dann einen einzelnen Worker-Thread implementieren, um die Verarbeitung zu tun.

Gibt es eine bessere Möglichkeit, diese Art von Workflow zu verarbeiten?

Antwort

2

Ich denke, der beste Weg für lange Datenverarbeitung ist so etwas wie Celery.

  1. Anfrage senden, um Task auszuführen und Task-ID zu empfangen.
  2. Senden Sie regelmäßig ajax-Anforderungen, um den Task-Fortschritt zu überprüfen und das Ergebnis der Task-Ausführung zu erhalten.