我正在使用Daphne进行套接字和http连接。我正在运行4个工作容器,现在正在docker容器中本地运行所有内容。
如果我尝试上传400MB的文件,我的daphne服务器将失败。它适用于最大15MB的小文件。
我的 docker 容器退出,错误代码137。daphne日志中没有任何错误。达芙妮容器刚刚死亡,但工作容器继续运行。
有谁知道是否有办法提高达芙妮的上传限制,或者我错过了其他东西?
我通过以下方式启动daphne服务器daphne -b 0.0.0.0 -p 8001 project.asgi:channel_layer --access-log=${LOGS}/daphne.access.log
最佳答案
这是因为daphne会在将控制权转移到带有通道的django之前立即完全加载整个HTTP POST请求主体。
您所有的400 MB都已加载到RAM here中。您的docker容器由于out of memory原因而死亡。
即使在检查django中的请求正文大小之前,也会发生这种情况。参见here
有公开票here
如果您想立即阻止它,请使用uvicorn代替daphne。 Uvicorn必须通过块将控制权传递给Django。并且根据FILE_UPLOAD_MAX_MEMORY_SIZE
django设置,您将在硬盘上(而不是RAM中)收到一个临时文件。但是您需要编写自己的AsyncHttpConsumer
或AsgiHandler
,因为通道中的AsgiHandler
和AsgiRequest
也不支持分块主体。这可以在PR之后实现。
关于python - 达芙妮Django文件上传大小限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46986220/