python - 如何从单个应用程序路由 : Flask (Python) 返回多个响应

标签 python python-3.x flask heroku

我在 Heroku 上托管了一个用 Python 编写的 Flask 应用程序。我有一个类似这样的功能:

@app.route("/execute")
def execute():
    doSomething()
    return Response()

现在,问题是 doSomething() 的执行时间超过 30 秒,绕过了 Heroku 的 30 秒超时持续时间,它杀死了应用程序。

我可以创建另一个线程并在其中执行 doSomething(),但是 Response 对象需要返回一个只有在 doSomething 之后才可用的文件() 执行完毕。

我也尝试过使用生成器和 yield,但也无法让它们工作。像这样的东西:

@app.route("/execute")
def execute():
    def generate():
        yield ''
        doSomething()
        yield file
    return Response(generate())

但该应用要求我刷新页面以获取第二个生成的对象。

我基本上需要做的是最初返回一个空的Response对象,开始执行doSomething(),然后返回另一个Response 对象。我该如何实现?

最佳答案

通常对于 http,一个请求意味着一个响应,仅此而已。

对于您的问题,您可能需要调查:

  • Streaming Response ,用于包含多个部分的大响应。
  • Sockets允许对单个“请求”进行多个“响应”。
  • 与您的客户进行多次查询,如果您可以控制您的客户代码,这很可能是最简单的解决方案

我建议阅读 this ,它有点技术性,但它帮助我理解了很多东西。

关于python - 如何从单个应用程序路由 : Flask (Python) 返回多个响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61390140/

相关文章:

python - 如何在 flask send_file 中发送标题?

python - 如何设置 Tkinter 小部件的大小(以像素为单位)?

python - random.randint 函数没有按照我希望的方式工作

python-3.x - 使用 NetworkX 进行图形排列和旋转

python - Flask-Bokeh-Gunicorn : Models must be owned by a single document

python - python和 Elasticsearch 更新错误

python - 将站点部署到 Azure 时出现 "OperationalError: database is locked"

python - python 中调用的函数没有返回值

python - “ImportError: no module named ' bcolz '” 用pip安装后

python - 如何在 python 3.5 中将文件内容添加到变量