【问题标题】:Daphne Django file upload size limitationsDaphne Django 文件上传大小限制
【发布时间】:2017-10-28 04:21:19
【问题描述】:

我将 Daphne 用于套接字和 http 连接。我正在运行 4 个工作容器,现在在 docker 容器中本地运行所有内容。

如果我尝试上传 400MB 的文件,我的 daphne 服务器会失败。它适用于最大 15MB 的小文件。

我的 docker 容器退出并显示错误代码 137。我在 daphne 日志中没有收到任何错误。 daphne 容器会死掉,但工作容器会继续运行。

有谁知道是否有办法增加对 daphne 的上传限制或我遗漏了其他东西?

我通过以下方式启动 daphne 服务器 daphne -b 0.0.0.0 -p 8001 project.asgi:channel_layer --access-log=${LOGS}/daphne.access.log

【问题讨论】:

  • Daphne 没有记录任何内容表明它可能内存不足...
  • 这也是我所怀疑的。有没有办法解决这个问题,我正在使用docker-compose up 来运行我的容器。我环顾四周,看到 oom-kill-disable 标志传递到 docker run。但我无法使用它运行。
  • 我对 docker 的了解还不够多,不能说 - 如果内存是问题,那么您将不得不找到一些方法来增加可用的内容。
  • @solarissmoke 你是对的,因为 Docker 内存不足。一旦我分配了更多内存,一切都开始工作了。

标签: python django docker daphne


【解决方案1】:

这是因为 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 中)收到一个临时文件。但是您需要编写自己的AsyncHttpConsumerAsgiHandler,因为来自频道的AsgiHandlerAsgiRequest 也不支持分块正文。这将在PR 之后成为可能。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2011-01-29
    • 2022-10-26
    • 1970-01-01
    • 2011-02-23
    • 2017-03-09
    • 2011-01-13
    • 1970-01-01
    • 2022-12-21
    相关资源
    最近更新 更多