gpt4 book ai didi

python-3.x - Gunicorn禁用超时

转载 作者:行者123 更新时间:2023-12-04 08:53:57 25 4
gpt4 key购买 nike

我正在使用Gunicorn服务于我的 flask web应用程序。我的网络应用程序发送了一些请求,要求下载超过10GB的巨大文件,这需要一段时间才能完成。我正在使用生成器将进度输出流回到网页,因此连接保持打开状态,直到下载完成。我的问题是Gunicorn将在一定数量的秒后超时。

我将超时配置为更长,如下所示:

/usr/bin/gunicorn -c /my/dir/to/app/gunicorn.conf -b 0.0.0.0:5000 wsgi --timeout 90

但是我不知道要花多长时间,所以如果下载的文件越来越大,我必须不断更改此超时时间。

我想知道是否有一种方法可以全部禁用超时,或者是否还有另一种方法可以补救较长的下载时间。

最佳答案

您使用Gunicorn指定的超时设置基本上是释放连接并重新启动工作程序。 unicorn 杀死了这些闲散的 worker ,并重新启动了他们。 [1]

如果您正在流回响应,则是IMO,您的工作人员不应被父进程撞倒或杀死。请注意,如果主机未发送或接收任何数据,则连接处于空闲状态。

所以现在这是您可能想尝试的。这些是我的个人建议。

  • 使用--threads设置,并将其设置为大于1的值。这样,您的工作人员可能不会闲着,可能正在处理其他请求。 [2]
  • 您可以尝试在请求的 header 中提供超时,而不是在此处指定超时。为此,您需要了解Keep-Alive header 。 Keep-Alive具有timeout参数。 [3][4]
  • 使用multi-part下载可加快大文件的下载速度。为此,您需要将下载分为几部分,然后可以发出并行请求以下载该大文件。 [5]
  • 既然您的目标似乎是要在网页上流回下载进度,所以不要使用轮询技术来保持连接处于事件状态并保持打开状态,而是使用轮询技术来获取下载进度。每隔250-400毫秒进行一次轮询以获取更新。这样,您的系统在慢速网络连接上也将更加健壮,并且可以针对任意大文件进行扩展。需要注意的是,您需要以某种方式维护已下载多少文件的信息。我使用Actor框架亲自在Scala中构建了一个多部分的下载管理器。
  • 另一个建议是,您可能还想尝试像Flask-SocketIO这样的库。尽管这并不是真正的双向通信,但重点是要确保套接字保持打开状态以返回进度更新。 [6]
  • 关于python-3.x - Gunicorn禁用超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769131/

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