MemoryError с Django при передаче файла фильма - PullRequest
0 голосов
/ 25 января 2011

В моем приложении Django я перечисляю содержимое каталога, содержащего фильмы (около 400 МБ).Когда я пытаюсь воспроизвести фильм в браузере, я получаю MemoryError.У меня есть содержимое этого фильма в папке «media», которую я пометил как статически.

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

Я использую lighttpd с Django и FCGI.

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 января 2011

Вам не хватает памяти, потому что вы читаете весь файл в памяти и буферизируете его перед его обслуживанием. Удалите статический конфиг url из django urls.py и настройте этот URL для lighthttpd.

Но лучший способ для фильмов такого размера - это потоковое вещание. Посмотрите на любой сервер потоковой передачи мультимедиа и посмотрите, поможет ли он вам. Это может помочь вам. Потоковое видео от Flowplayer и Lighthttpd

- Сай

0 голосов
/ 04 мая 2011

Я сам решил ошибку.

На самом деле проблема была в неправильной конфигурации моего сервера lighttpd. Проблема заключалась в том, что я настроил свой веб-сервер так, чтобы он перенаправлял каждый запрос в Django и позволял Django обрабатывать запрос и отправлять ответ через сервер.

Итак, когда я запрашиваю воспроизведение большого файла фильма (скажем, около 400 МБ), этот запрос отправляется в Django и каким-то образом Django загружает файл в память.

Поскольку это было встроенное устройство с ограниченной памятью, Django выдал «MemoryError».

Я изменил конфигурацию моего веб-сервера, и все заработало как чудо.

Надеюсь, это поможет кому-то в будущем. Ура!

0 голосов
/ 25 января 2011

Возможно, вы не настроили lighttpd для обработки запросов к /media/ и Django работает в режиме отладки (DEBUG = True в вашем settings.py).

Если вы используете собственные документы Django для развертывания lighttpd , этого не должно быть.

...