【问题标题】:Long time request in Flask with React使用 React 在 Flask 中进行长时间请求
【发布时间】:2020-05-07 20:12:18
【问题描述】:

我正在用 Flask API 和 React 构建一个应用程序。

应用程序的第一页向用户展示了一个上传文件表单。用户选择一个文件 (700 MB) 并点击上传。

完成后,后端:

  • 获取文件,解压缩
  • 运行一些机器学习模型
  • 返回一个包含正确数据的 JSON

结束后,react 获取 JSON 并呈现一个新页面。

这三个步骤需要 10 分钟以上,因此我收到错误 500,我认为这是由于长时间请求超时造成的。

我想知道是否有办法制作timeout=None

我寻找了一些答案,他们建议使用Celery。但是,我不确定这是否适合我的任务。

【问题讨论】:

  • 这能回答你的问题吗? Making an asynchronous task in Flask
  • 虽然您可以增加超时时间,但这不是一个可靠的解决方案。请参阅stackoverflow.com/questions/31866796/… 了解实现目标的不同方法。
  • 根据模型完成工作的时间,通过某种事件解决这个问题可能会更好。
  • @TheIncorrigible1 谢谢,你能告诉我更多细节吗?
  • 解释“事件驱动架构”的范围超出了本网站的范围,但这是我建议查找的关键字。使用 websocket 或类似性质的东西开始工作可能会很幸运。

标签: python flask


【解决方案1】:

我第二个建议@TheIncorrigible 用某种event driven architecture 来解决你正在做的是Web Worker Architecture。 Ref

您的问题让我想起了一项名为 control tower 的 AWS 服务,其中启动该服务的着陆区需要超过 10 分钟,而 AWS 可以优雅地处理这个问题。当您尝试启动时,它会给我一个横幅,说它正在取得进展,需要 1 小时。在控制台日志中,我注意到他们正在使用 Promise(不完全确定他们是如何实现的,how long 它可以处理)。

也许你可以尝试在异步计算中使用 Promises。我不是专家,但看起来你可以使用它来实现这一点。基本了解可以看this short video

还有signalr 允许服务器代码向客户端Web 应用程序发送异步通知。您可以检查是否可以将其应用于您的案例signalr in python dicussion

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2021-02-07
    • 2018-02-03
    • 2020-08-04
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2013-09-27
    相关资源
    最近更新 更多