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

2024-05-29 03:48:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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替换{}。在

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

问题:如何在发电机内部检查连接是否仍然有效?在

编辑

在我的理论中,它似乎应该调用。在

但是,我没有看到任何这种情况发生的痕迹,每次调用我都看到pstree在每个请求/连接到/updates之后产生一个新的条目。在


Tags: trueflaskstreammakedef方式事件update

热门问题