在我的Django应用程序中,我列出了包含电影(大约400 MB)的目录的内容。当我尝试在浏览器中播放电影时,我得到了MemoryError。我在“媒体”文件夹中有这个电影内容,我已将其标记为静态。
我相信这部电影应该直接通过我的网络服务器提供,而不会将请求传递给Django。在我的配置中是否存在一些错误,或者整体上有一个不同的解决方案可用于提供电影,就像我的情况一样。
我正在使用带有Django和FCGI的lighttpd。
感谢。
答案 0 :(得分:1)
因为你在内存中阅读了整个文件,所以内存不足。在服务之前缓冲它。从django urls.py中删除静态URL配置,并配置由lighthttpd提供的URL。
但对于那种尺寸的电影来说,最好的方式就是流媒体。看看任何媒体流服务器,看看它是否对您有所帮助。这可能对你有所帮助。 Streaming movies by flowplayer and lighthttpd
- 西
答案 1 :(得分:0)
可能是您没有配置lighttpd来处理/media/
本身的请求,而Django正在调试模式下运行(DEBUG = True
中的settings.py
)。
如果您关注Django自己的docs for lighttpd deployment,这不应该发生。
答案 2 :(得分:0)
我自己解决了错误。
实际上问题是我的lighttpd服务器配置错误。问题是我配置了我的网络服务器,将每个请求重定向到Django,并允许Django处理请求并通过网络服务器为响应提供服务。
所以,发生的事情是当我请求播放一个大型电影文件(比如大约400 MB)时,这个请求转到了Django,不知怎的,Django正在将文件加载到内存中。
由于它是一个内存有限的嵌入式设备,Django抛出了“MemoryError”。
我改变了我的网络服务器的配置,一切都像魅力一样。
希望这可以帮助将来的某个人。干杯!