Много промежуточного программного обеспечения django предотвратит потоковое содержимое. Большая часть этого промежуточного программного обеспечения должна быть включена, если вы хотите использовать приложение администратора django, так что это может раздражать. К счастью, это было разрешено в django 1.5 release. Вы можете использовать StreamingHttpResponse, чтобы указать, что вы хотите передать результаты назад, и все промежуточное программное обеспечение, которое поставляется с django, знают об этом и действуют соответственно, чтобы не буферировать вывод вашего контента, а отправлять его прямо по линии. Тогда ваш код будет выглядеть следующим образом, чтобы использовать новый объект StreamingHttpResponse.
def stream_response(request):
return StreamingHttpResponse(stream_response_generator())
def stream_response_generator():
for x in range(1,11):
yield "%s\n" % x # Returns a chunk of the response to the browser
time.sleep(1)
Обратите внимание на Apache
Я проверил выше на Apache 2.2 с Ubuntu 13.04. Модуль apache mod_deflate, который был включен по умолчанию в тестируемой настройке, будет буферизовать содержимое, которое вы пытаетесь передать, до тех пор, пока оно не достигнет определенного размера блока, тогда он будет gzip содержимого и отправит его в браузер. Это предотвратит работу вышеуказанного примера по желанию. Один из способов избежать этого, чтобы отключить mod_deflate, поставив следующую строку в конфигурации Apache:
SetEnvIf Request_URI ^/mysite no-gzip=1
Это обсуждается больше в How to disable mod_deflate in apache2? вопрос.
@ Tomasz: спецификация протокола WSGI http://www.python.org/dev/peps/pep-0333/ –