在烧瓶中完成异步响应

accomplish asynchronized response in flask

我正在使用 python flask 建立网站。迷茫的时候,我来展示下我的可怜处境:

...  
@app.route('/wanted_delay_response')
def delay_response():
    def background_work():
        # I want to check some flags in the background
        # this should not block, but it does as I try below
        pass
    gevent.spawn(background_work)
    # the most confusing part comes:
    return 'This is not what I really want to response'

如上所示,后台工作会在后台继续进行,但我想要的结果应该来自于它。

然而,当后台工作运行但没有任何结果时,我不知道如何通知服务器处理其他请求。

或者有没有什么优雅的把当前请求搁置一旁,等后台工作结束再回来响应,在此期间,服务端可以处理其他请求?

客户端和服务器之间的 HTTP 请求是短暂的,因此不适合您描述的用例。如果服务器在数据准备好后向客户端发送数据,则应使用服务器推送技术。例如你可以使用Websockets来实现客户端和服务器之间的连接。

然而,websockets 并不容易管理,因为连接打开的时间很长。 Flask 有一些扩展,可以简化 websockets 的使用。例如检查 https://github.com/kennethreitz/flask-sockets.