【问题标题】:Handling multiple requests in Flask在 Flask 中处理多个请求
【发布时间】:2013-01-18 07:50:48
【问题描述】:

我的 Flask 应用程序必须进行相当大的计算才能获取某个页面。在 Flask 执行该功能时,其他用户无法访问该网站,因为 Flask 正忙于进行大型计算。

有什么方法可以让我的 Flask 应用程序接受来自多个用户的请求?

【问题讨论】:

  • 卸载大型计算,您可以使用celery。它可以使用多个进程、线程、微线程来执行任务。

标签: python flask


【解决方案1】:

是的,将您的应用程序部署在不同的 WSGI 服务器上,请参阅Flask deployment options documentation

Flask 附带的服务器组件实际上只适用于您开发应用程序时;即使它可以配置为使用app.run(threaded=True) 处理并发请求(从 Flask 1.0 开始,这是默认设置)。上述文档列出了可以处理并发请求的服务器的几个选项并且更加健壮和可调整。

【讨论】:

  • 将利用我的机会在 cmets 中提问 - 您会从文档中列出的 5 种方式中建议哪种方式?
  • @IgnasB.:抱歉,这在很大程度上取决于您的用例、经验和部署方案。我也不能说我已经使用了所有 5 个,所以我不打算提出建议。
  • 谢谢,它有效!我只剩下一个(非常重要的)问题:如果用户访问页面,但在计算完成之前离开,那么计算会一直运行直到完成。如果用户离开,如何让计算停止运行?
  • @Neyuh:实际上,不确定你能做些什么。如果套接字提前关闭,可能是烧瓶引发异常,不确定。
  • 非常感谢 threaded=True 提示。 :) 我已经浪费了好几个小时来寻找一个解释为什么并发文件上传让我的烧瓶应用程序窒息。
【解决方案2】:

对于需要很长时间的请求,您可能需要考虑为它们启动后台作业。

【讨论】:

  • 什么是长时间?会说10秒很长吗?或者超过一分钟的时间很长?我想这取决于应用程序,但有什么经验法则吗?
  • 您不希望您的请求超时或您的用户认为它只是被阻止了,我认为 10 秒已经有风险,超过这个时间就太长了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多