我们知道 flask 可以简单的做一个 EventSource: https://stackoverflow.com/questions/12232304/how-to-implement-server-push-in-flask-framework
def queue_consumer():
conn = 创建连接() #连接到消息队列 rabbitmq,创建 channel
for data in conn.读取数据():
yield b"data: "+data+b"\n\n"
关闭连接() # 怎么执行到?
@app.route("/stream")
def stream():
return Response(queue_consumer(), mimetype="text/event-stream")
问题来了,当浏览器断开连接的时候,这个 queue_consumer 函数并不知道它自己应该结束,表现为没人再去执行这个 yield 连接就会一直保持着,资源(channel)没有释放
问:如何让 Python 放弃长时间(比如说 1 分钟)没能被读到的 yield ? 或者说怎么让 Flask 在连接断开的时候调用自定义的清理函数?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.