Ich möchte eine Webseite besuchen können und es wird eine Python-Funktion ausführen und den Fortschritt in der Webseite anzeigen.
Wenn Sie also die Webseite besuchen, können Sie die Ausgabe des Skripts sehen, als würden Sie es von der Kommandozeile aus starten und die Ausgabe in der Befehlszeile sehen.
Was muss ich in der Funktion tun?
Was muss ich in der Vorlage tun?
BEARBEITEN:
Ich versuche den Code von Markus Unterwaditzer mit einer Vorlage zu verwenden.
%Vor%Python-Code
%Vor%Und es läuft, aber ich sehe nichts im Browser.
Hier ist eine sehr einfache App, die die Ausgabe eines Prozesses mit normalem HTTP streamt:
%Vor%Ich hatte heute das gleiche Problem und habe einen Weg gefunden, Markus Unterwaditzers Antwort auf die Arbeit mit einem Template anzupassen.
Der Schlüssel ist, jinjas Template.generate()
anstelle von Template.render()
zu verwenden wird von flashs render_template()
verwendet.
Angenommen, es gibt eine Vorlage result.html
, die wie folgt aussieht:
Ich würde meinen, dass dies am einfachsten ist, wenn Sie Ihre Seite erstellen und dann mithilfe von AJAX regelmäßig Anfragen an den Server stellen und den Inhalt Ihrer Seite mithilfe der Ergebnisse aktualisieren. Dies könnte die Implementierung langer Abfragen beinhalten, um dies zu tun.
Wie Sie dies tun, müssen Sie Ihre Funktion irgendwie blockierungsfrei machen, so dass Sie während des Betriebs immer noch Anfragen bedienen können. Sie könnten eine Funktion manuell schreiben, die eine Anfrage bedient, wenn eine wartet und ansonsten den nächsten "Chunk" der Funktion weiter ausführt. Das würde bedeuten, Ihre Funktion in kleine Teile zu zerlegen, damit Sie sie nach Bedarf versenden können.
Ein besserer Ansatz könnte das Threading oder Multiprocessing sein, je nachdem, ob Ihre Funktion an die E / A- oder CPU-Nutzung gebunden ist.
Haben Sie einen Plan, WebSocket zu verwenden? Wenn ja, können Sie sich an Websocket mit Flask and Gevent
wendenTags und Links python python-2.7 jinja2 flask