在烧瓶中完成异步响应
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.
我正在使用 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.