Flask:如何检测无限响应发生器中的断开连接?

时间:2015-12-22 14:22:39

标签: python flask wsgi werkzeug eventsource

flask中,我有一个与EventSource一起使用的页面,用于接收更新/事件。

以相当琐碎的方式实施:

@route('/updates')
def updates():
    def gen():
        while True:
            update = make_update()
            yield "data: {0}\n\n".format(json.dumps(update))
return Response(stream_with_context(gen()), mimetype="text/event-stream")

我遇到的问题是每次重新加载将EventSource连接到我的"更新"页面它创建一个新的线程来服务"更新"请求。它永不消亡

有更新,所以这意味着它正在推送数据,使我的服务器使用越来越多的线程,以及越来越多的内存。

我希望得到的简单解决方案是用某种形式的while True替换while is_connected()

但是,我似乎找不到一种方法来检测浏览器是否仍然连接。

问题:如何在我的发电机内检查连接是否仍然存在?

修改

通过代码查看它似乎应该在生成器上调用close(),所以理论上它应该在GeneratorExit中的某个点抛出gen()

但是,我没有看到任何这种情况发生的痕迹,每次通话后,我都会看到pstree在每次请求/连接/updates后再生成一个条目。

0 个答案:

没有答案