You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask使用EventSource推送event-stream时后续请求卡Pending如何解决

问题根因

你遇到的请求Pending问题核心是Flask默认自带的开发服务器为单线程同步运行模式:
/chart_data 路由返回的SSE响应使用了无限循环的生成器,只要客户端保持EventSource连接,这个请求就会长期占用唯一的工作线程,后续所有控制类请求无法被调度执行,就会一直处于Pending状态。

解决方案
    1. 开发环境临时修复:开启Flask多线程模式
      启动应用时给run方法添加threaded=True参数,允许同时处理多个请求:
    if __name__ == '__main__':
        app.run(threaded=True, debug=True)
    
    1. 生产环境替换WSGI服务器
      不要使用Flask自带的开发服务器,改用支持多 worker/异步的服务器,例如Gunicorn搭配gevent异步worker:
      安装依赖:pip install gunicorn gevent
      启动命令:gunicorn -w 4 -k gevent 你的启动文件名:app
      上述命令会启动4个异步worker,可同时处理上百个SSE长连接,不会阻塞控制类请求。
    1. 优化SSE资源占用
      当前每个客户端连接/chart_data都会新建一个KilnCommand实例、跑一个独立的无限循环拉取温度数据,会浪费服务器资源。建议把温度数据拉取逻辑做成全局单例,所有SSE连接共享同一份温度数据,减少不必要的IO和CPU消耗。
    1. 前端添加连接释放逻辑
      页面关闭/跳转时主动关闭EventSource连接,避免无用的长连接占用服务器资源:
      在你的show_jobs.html的脚本中添加如下代码:
    window.addEventListener('beforeunload', () => {
      source.close()
    })
    

内容的提问来源于stack exchange,提问作者moonstripe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:06:03