gpt4 book ai didi

python - Django Daphne 大文件上传

转载 作者:太空宇宙 更新时间:2023-11-03 21:38:48 28 4
gpt4 key购买 nike

我有一个 Django Web 应用程序,它使用 Channels 和 Daphne 进行 Websocket 通信。我的所有 websocket 东西都工作正常,没有任何问题。

我的麻烦来自于我的服务器还允许我将文件上传到服务器。小文件(甚至最大 282mb)正在上传并且工作正常,没有任何问题。

但是,大文件会导致 500 内部错误 - Daphne 并显示此堆栈跟踪:

2018-10-29 12:40:14,009 - ERROR - http_protocol - Traceback (most recent call last):
File "..\venv\lib\site-packages\daphne\http_protocol.py", line 176, in process
"body": self.content.read(),
MemoryError

我猜这告诉我达芙妮内存不足。我在这里找到引用:Daphne Django file upload size limitations这也有助于证实这一发现。

我需要的是如何解决这个问题的答案。我没有在 Docker 中运行我的项目,而是在 Linux VM 实例上运行。如果我增加整个虚拟机上使用的总 RAM,daphne 是否能够获取更多内存?

有什么方法可以指定 daphne 允许使用比当前更多的内存吗?该服务器实例有 4GB 的 RAM,而我的文件只有 675MB,因此除非它同时在内存中存储多个副本,否则它应该有足够的内存来容纳该文件。

如何让 Daphne 能够成功接受大文件上传?

最佳答案

我发布了答案here .

Daphne 冗余且过早地将整个 HTTP POST 请求正文加载到 RAM 中。如果您需要上传足够大的文件 - 您需要使用 uvicorn而不是达芙妮。

替换daphne -p <your-port> -b <your-host> ...uvicorn --port <your-port> --host <your-host> ...

之后你必须编写自己的 AsyncHttpConsumer因为AsgiHandlerAsgiRequest来自 channel 的也不支持分块正文。

关于python - Django Daphne 大文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com