Веб-приложение зависает при загрузке - PullRequest
0 голосов
/ 17 января 2012

Я поддерживаю приложение для управления активами документов с открытым исходным кодом под названием NotreDAM , написанное на Django, работающем на Apache , экземпляре TwistedWeb .

Всякий раз, когда какой-либо пользователь загружает файл, приложение зависает для всех пользователей на весь период загрузки. Я проследил команду загрузки до этого момента в коде, но я недостаточно разбираюсь в Python / Django, чтобы понять, почему это может происходить.

response = HttpResponse(open(fullpath, 'rb').read(), mimetype=mimetype)
response["Last-Modified"] = http_date(statobj.st_mtime)
response["Content-Length"] = statobj.st_size
if encoding:
    response["Content-Encoding"] = encoding
return response

Знаете ли вы, как можно исправить зависание приложения во время загрузки файла?

Ответы [ 2 ]

0 голосов
/ 19 января 2012

notreDAM обслуживает файлы ресурсов с помощью команды django.views.static.serve (), которая в соответствии с документацией Django «Использование этого метода неэффективна и небезопасна. Не используйте это в производственных условиях. Используйте это только для разработки«.Итак, поехали.Я должен использовать другую команду.

0 голосов
/ 18 января 2012

Веб-сервер читает весь файл в памяти вместо потоковой передачи. Это не очень хорошо написанный код, но не ошибка как таковая.

Блокирует клиент Apache (предварительно разветвленный) на время чтения всего файла. Если IO медленный и файл большой, это может занять некоторое время.

Обычно у вас есть несколько предварительно разветвленных клиентов Apache, настроенных для удовлетворения запросов такого типа, но на плохо настроенном веб-сервере вы можете столкнуться с такими проблемами, и это не проблема Django. Ваш веб-сервер, вероятно, выполняет только один предварительно разветвленный процесс, возможно, в режиме отладки.

...