2016-04-09 4 views
0

ich eine Web-Anwendung in Python (googleappengine) zu schreiben, das funktioniert weg:Python Web-Anwendung mit getrennter Verarbeitung

Benutzer Rohdaten laden und einige Informationen über ein Web-Formular. Die App liest die Info und die Rohdaten und macht eine Menge Verarbeitung über die Daten.

Ein Teil dieser Verarbeitung erfordert eine Web-Anfrage, um einige Informationen zu überprüfen. Da einige dieser Webanfragen einige Sekunden dauern, bis sie abgeschlossen sind, stößt die App auf eine Zeitüberschreitung.

Ich möchte wissen, ob es eine Möglichkeit gibt, die Daten getrennt zu verarbeiten. Ich kann dem Benutzer eine Nachricht anzeigen, dass die Daten "im Ofen" sind und nach Abschluss der Verarbeitung werden die Daten angezeigt.

Wie kann ich es separat ausführen? Wie kann ich wissen, wann es fertig ist?

Dank

Antwort

0

Der einfachste Ansatz wäre es, die Verarbeitung zu einem deferred task abzuladen.

Erstellen Sie in Ihrem Anforderungshandler einen Schlüsselwert, der der Aufgabe zugeordnet werden soll. Übergeben Sie den Schlüsselwert und die Daten für die Verarbeitung an die verzögerte Aufgabe. Geben Sie den Schlüsselwert an den Client zurück (ich gehe davon aus, dass die Anfrage über Javascript gesendet wird).

Lassen Sie die Aufgabe das Ergebnis der Verarbeitung in den Datenspeicher schreiben oder in memcache speichern (beachten Sie jedoch, dass Memcache das Ergebnis ohne Warnung löschen kann). Verwenden Sie den Schlüsselwert aus dem Handler als Datenspeicher oder Memcache-Schlüssel.

Auf der Seite des Browsers senden Sie Ihrem JavaScript periodische Anfragen, die den Schlüssel enthalten, an einen anderen Request-Handler, der Daten zurückgibt, wenn er im Speicher gefunden wird. Andernfalls wird die Nachricht 'Noch nicht fertig' zurückgegeben.