2013-03-12 16 views
6

Se si implementa StreamingHttpResponseas shown here, la risposta "streaming" non viene visualizzata fino a quando i 10 secondi non sono scaduti. Non ci sono molte informazioni su djangoproject tranne per il fatto che è utile per generare file CSV di grandi dimensioni, pur avvertendo che le attività costose devono essere eseguite al di fuori del ciclo richiesta-risposta.Django 1.5 - utilizzo del nuovo StreamingHttpResponse

Tuttavia, non riesco a vedere che funzioni affatto utilizzando un codice che richiede molto tempo. C'è qualcosa riguardo all'oggetto generatore che impedisce questo? Ecco il codice duplicato per riferimento.

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

I 100 byte, in streaming o non, saranno memorizzati nel buffer ai livelli più bassi della rete. Prova un milione di righe per cominciare. –

+0

@Pavel Grazie per quello - Ho aggiunto '' * 1024 alla stringa di rendimento e funziona come desiderato – Frank

risposta

2

[soluzione di OP convertito rispondere sotto]

testa di Pavel sottolineato che il problema con il mio esempio era con il buffering del browser, che si risolve modificando la quantità di dati inviati, come ad esempio

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