【问题标题】:Gunicorn Worker timeout in Django request hosted on cloud foundryCloud Foundry 上托管的 Django 请求中的 Gunicorn Worker 超时
【发布时间】:2020-07-10 21:42:01
【问题描述】:

我们有一个托管在 Cloud Foundry 上的 Angular + Django 应用程序。我已经编写了一些 API,其中有一个 API 始终失败并出现错误:

工作人员超时 (pid:120)

此请求传输大量数据 (~35MB),有时会收到响应,有时请求会失败并出现错误:

net::ERR_CONTENT_LENGTH_MISMATCH 200(正常)

我已经搜索过类似的问题。我可以看到解决方案说增加 gunicorn 配置文件中的超时。但我没有任何这样的文件。我们使用内容为的 procfile:

web: gunicorn ApplicationName.wsgi:application

那么,我怎样才能增加超时时间。

而且,增加超时时间是否会对应用程序产生任何影响。

【问题讨论】:

    标签: django gunicorn cloud-foundry


    【解决方案1】:

    您可以通过多种方式为 gunicorn 指定配置选项。来自文档:

    1. 环境变量
    2. 框架设置
    3. 配置文件
    4. GUNICORN_CMD_ARGS
    5. 命令行

    https://docs.gunicorn.org/en/latest/configure.html

    我的建议是 3 或 5。如果您已经有配置文件,只需在其中添加即可。如果不这样做,请将其添加为命令行参数,您只需在 Procfile 中将其设置为命令的参数即可。

    例如:

    web: gunicorn --timeout 45 package:app
    

    我建议您避免使用 4,GUNICORN_CMD_ARGS,因为 buildpack 使用它来设置一些默认设置,这些设置在您在 Cloud Foundry 上运行时是必需的。如果你设置它,它将覆盖 buildpack 及其默认值。

    在撰写本文时,buildpack 正在设置以下默认值:

    export GUNICORN_CMD_ARGS=${GUNICORN_CMD_ARGS:-'--access-logfile -'}
    

    https://github.com/cloudfoundry/python-buildpack/blob/master/src/python/supply/supply.go#L702

    如果你真的想使用这个选项,你可以。您只需要包含默认值,否则您将丢失 Gunicorn 的日志记录。这里的主要风险是如果 buildpack 将来更改其默认值。那你就会不同步了。


    附带说明一下,您可能还想查看异步工作器选项。如果您有主要等待的代码,例如 I/O,这可能是一个更好、更具可扩展性的选项(而不是增加超时)。

    https://docs.gunicorn.org/en/latest/design.html#choosing-a-worker-type

    您可以通过为您选择的异步工作器安装软件包来做到这一点。

    https://docs.gunicorn.org/en/latest/install.html#async-workers

    然后将 --worker-class <worker> 标志添加到 Procfile 启动命令中的参数(或使用任何其他 Gunicorn 支持配置方法)。注意 - 使用此选项时不需要包含 --timeout

    https://docs.gunicorn.org/en/latest/settings.html#worker-class

    例如:

    pip install gunicorn[eventlet]
    gunicorn --worker-class eventlet package:app
    

    【讨论】:

    • 添加到 Procfile 工作。谢谢你的建议。
    猜你喜欢
    • 2021-09-29
    • 2019-10-29
    • 2014-07-18
    • 2021-12-19
    • 2020-04-27
    • 2019-10-19
    • 2021-05-18
    • 2012-06-06
    • 2015-06-14
    相关资源
    最近更新 更多