【问题标题】:How to prevent the 230 seconds azure gateway timeout using python flask for long running work loads如何使用 python 烧瓶防止 230 秒 azure 网关超时以进行长时间运行的工作负载
【发布时间】:2022-01-12 09:12:19
【问题描述】:

我有一个 python 烧瓶应用程序作为 azure web 应用程序,一个功能是计算密集型工作负载,需要 5 多分钟才能处理,是否有任何黑客可以通过保持 TCP 连接之间的活动来防止网关超时错误函数处理数据时的客户端和api?当前代码示例如下。

from flask import Flask

app = Flask(__name__)

@app.route('/data')
def data():
    mydata = super_long_process_function()
    # takes more than 5 minutes to process
    return mydata 

由于 super_long_process_function 需要超过 5 分钟,它总是超时并出现 504 Gateway Time-out。我要提到的一件事是,这是 TCP 级别的空闲超时,这意味着如果连接只是空闲并且没有发生数据传输,那么只有这个超时才会被命中。那么在我们处理数据时,flask 中是否有任何黑客可以用来防止这种超时,因为根据我的研究和阅读 Microsoft 文档,无法更改 Web 应用程序的 230 秒限制。

【问题讨论】:

    标签: python azure flask gateway azure-webapps


    【解决方案1】:

    简而言之:正如您所说,230 秒超时,无法更改

    230 秒是请求在不将任何数据发送回响应的情况下可以花费的最长时间。不可配置。

    来源:GitHub issue

    超时发生在没有响应。保持连接打开并发送数据无济于事。

    有几种方法可以解决这个问题。以下是另外两种可能的解决方案,您可以使用它们来触发长时间运行的任务,而不会出现超时问题。

    1. 仅通过 HTTP 调用触发长时间运行的任务,但在返回响应之前不要等待它们完成。
    2. 使用Storage QueuesService Bus 等消息传递机制触发任务。

    要使用长时间运行任务的结果更新 Web 应用程序,请考虑让响应包含一个 URL,前端可以调用以定期检查任务完成情况,您的请求具有一个回调 URL,以便在任务完成时调用已完成或实施Azure Web PubSub 以向客户端发送状态更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 2017-01-29
      • 2011-04-02
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多