Mahendra Liya
Mahendra Liya

Reputation: 13218

MemoryError with Django while serving a movie file

In my Django application, I list the contents of a directory which contains movies (of around 400 MB). When I try to play the movie in the browser, I get MemoryError. I have this movie content inside the "media" folder which I have marked to serve as statically.

I believe this movie should have been served directly through my web server without passing the request to Django. Is there some error in my configuration or is there whole together a different solution available for serving movies as in my case.

I am using lighttpd with Django and FCGI.

Thanks.

Upvotes: 0

Views: 264

Answers (3)

Mahendra Liya
Mahendra Liya

Reputation: 13218

I solved the error myself.

Actually the problem was with a misconfiguration with my lighttpd server. The problem was that I had configured my webserver to redirect every request to Django and allow Django to process the request and server the response through the webserver.

So, what was happening is when I request to play a large movie file (say around 400 MB), this request went to Django and somehow Django was loading the file in the memory.

Since it was an embedded device with a limited memory, Django threw an "MemoryError".

I changed the configuration of my webserver and everything worked like a charm.

Hope this helps someone in the future. Cheers!

Upvotes: 0

Sai Venkat
Sai Venkat

Reputation: 1248

You are running out of memory because you read the whole file in memory & buffer it before serving it. Remove the static url config from django urls.py and configure that url to be served by lighthttpd.

But the best way for movies of that size are best served is streaming. Take a look at any media streaming server and see if it helps you. This may help you. Streaming movies by flowplayer and lighthttpd

--Sai

Upvotes: 1

Benjamin Wohlwend
Benjamin Wohlwend

Reputation: 31818

Could it be that you haven't configured lighttpd to handle requests to /media/ itself and Django is running in debug mode (DEBUG = True in your settings.py).

If you follow Django's own docs for lighttpd deployment, this shouldn't happen.

Upvotes: 0

Related Questions