我们知道 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 在连接断开的时候调用自定义的清理函数?