2013-03-12 9 views
6

Jeśli zaimplementuję StreamingHttpResponseas shown here, odpowiedź "streaming" nie zostanie wyświetlona, ​​dopóki 10 sekund nie minie. Nie ma zbyt wielu informacji na temat djangoproject, z wyjątkiem tego, że jest to przydatne do generowania dużych plików CSV z ostrzeżeniem, że kosztowne zadania powinny być wykonywane poza cyklem żądanie-odpowiedź.Django 1.5 - używanie nowej StreamingHttpResponse

Jednak nie widzę, że działa w ogóle przy użyciu kodu czasochłonnego. Czy jest coś w obiekcie generatora, który temu zapobiega? Oto kod powielony dla odniesienia.

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

Twoje 100 bajtów, streaming lub nie, zostanie całkowicie zbuforowane na najniższych poziomach sieci. Wypróbuj milion wierszy na początek. –

+0

@Pavel Dzięki za to - dodałem "* 1024 do ciągu zysku i działa zgodnie z oczekiwaniami – Frank

Odpowiedz

2

[Rozwiązanie OP przekształcić w odpowiedzi poniżej]

komentarz Pavel wskazał, że problem z naszym przykładzie był z buforowaniem przeglądarki, który jest rozwiązany przez modyfikowanie ilości przesyłanych danych, jak na przykład

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