2013-03-12 5 views
6

Wenn ich StreamingHttpResponseas shown here implementieren, wird die 'Streaming' Antwort nicht angezeigt, bis die 10 Sekunden abgelaufen sind. Es gibt nicht viele Informationen über djangoproject, außer dass es nützlich ist, um große CSV-Dateien zu erzeugen, während davor gewarnt wird, dass teure Aufgaben außerhalb des Anfrage-Antwort-Zyklus ausgeführt werden sollten.Django 1.5 - mit der neuen StreamingHttpResponse

Allerdings kann ich nicht sehen, dass es überhaupt mit zeitintensiven Code funktioniert. Gibt es etwas am Generator-Objekt, das dies verhindert? Hier ist der Code als Referenz dupliziert.

import time 
from django.http import StreamingHttpResponse 

def stream_response(request): 
    resp = StreamingHttpResponse(stream_response_generator()) 
    return resp 

def stream_response_generator(): 
    for x in range(1,11): 
     yield '{} <br />\n'.format(x) 
     time.sleep(1) 
+8

Ihre 100 Bytes, Streaming oder nicht, werden absolut auf den niedrigsten Netzwerkebenen gepuffert. Versuchen Sie eine Million Zeilen für einen Start. –

+0

@Pavel Danke dafür - Ich habe '' * 1024 zum Yield String hinzugefügt und es funktioniert wie gewünscht – Frank

Antwort

2

[OP-Lösung unter Antwort umgewandelt]

Pavel Kommentar darauf hingewiesen, dass das Problem mit meinem Beispiel mit der Browser-Pufferung war, die als z.B. gesendet durch Modifizieren der Menge an Daten, gelöst ist,

yield '{} <br /> {}'.format(x, ' '*1024) 
Verwandte Themen