9

烧瓶中,我有一个用于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.

4

0 回答 0