【问题标题】:Flask: asynchronous response to clientFlask:对客户端的异步响应
【发布时间】:2014-01-21 13:28:22
【问题描述】:

我正在使用 Flask 在 Python 应用程序中开发 Web 服务器。我正在实现这种情况:客户端(它不会是浏览器)发送请求,服务器在后台执行一些长时间的任务,完成后将响应异步发送回客户端。有可能吗?

【问题讨论】:

  • 您的问题自相矛盾:根据定义,在任务完成时发送的 (HTTP) 响应不是异步的。您可能想要使用两个请求/响应,一个用于启动任务,另一个用于获取数据。 AFAIK,没有办法使用纯 HTTP 来做到这一点,尽管你可以使用 PubSubHubbub 的发布/订阅模式,或者,正如@GamesBrainiac 建议的那样,websockets
  • 我认为最好的方法是使用网络套接字。
  • 但是客户端不是浏览器...我认为最好的方法是这样做...

标签: python asynchronous background flask response


【解决方案1】:

HTTP 协议无法满足您的要求。每个请求同步接收响应。实现您想要的最接近的事情是:

客户端发送请求,服务器立即响应一个作业 ID,同时它还启动一个后台任务来进行这个长时间的计算。

然后,客户端可以通过在新请求中发送作业 ID 来轮询服务器的状态。响应再次是即时的,并包含作业状态,例如“进行中”、“完成”、“失败”等。服务器还可以返回进度百分比,客户端可以使用该百分比来呈现进度条。

您也可以实现 Web 套接字,但这需要启用套接字的服务器和客户端。

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2013-09-29
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2015-07-06
    相关资源
    最近更新 更多