@Bjornie
Изучаю Python

Почему долгое ожидание view перед выдачей файла для загрузки?

Имеется view, которая выдает excel с графиком. Единственная проблема, которая всегда присутствовала: долгое ожидание предложения загрузить сгенерированный файл.

Сегодня запрос начал уходить в 504, в связи с чем я сделал простой замер с помощью time. От запроса до самого return response проходит всего 14 секунд. После чего приходится ждать еще столько же, чтобы браузер отдай файл.

Поискав похожие темы на SOF выяснилось, что можно решить проблему увеличением значения time-out в конфигурации Apache.

Однако главный вопрос остается: почему происходит такое длительное ожидание ПЕРЕД отдачей файла (запросы к БД, генерация графиком и т.д. происходит быстро). И как это можно ускорить?

Приведу пример кода:
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=%s.xlsx' % date.today()
response.write(output.getvalue())
end = time.clock()
print(10, "%.2gs" % (end-start)) # 14 секунд с запроса -- ОК
return response # после чего долгое ожидание, с сегодняшнего дня приводящее к ошибке 504.
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
@neol
Если есть возможность, то лучший вариант - писать вывод в файл на диске и отдавать его силами nginx, используя заголовок X-Accel-Redirect, ИМХО. Так apache вообще не будет вовлечён в процесс передачи файла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы