Flask-SocketIO多用户环境下线程模块持续刷新数据导致页面崩溃问题求助
Flask-SocketIO多用户环境下线程模块持续刷新数据导致页面崩溃问题求助
大家好,我第一次用Flask做后端开发,需求是让网页上的数据每200秒自动更新一次。所以我在每个数据获取模块里都用了while True配合time.sleep(200)的循环,然后通过SocketIO来推送数据到前端。
我在连接事件里启动了一堆后台线程,代码是这样的:
@socketio.on('connect') def handle_connect(): threading.Thread(target=get_realAlarm_data,daemon=True).start() threading.Thread(target=get_nrp_data,daemon=True).start() threading.Thread(target=get_groupwip_data,daemon=True).start() threading.Thread(target=get_pm_data,daemon=True).start() threading.Thread(target=process_eqpstatus_data,daemon=True).start() threading.Thread(target=mark_count, daemon=True).start() for module_name in MODULES: threading.Thread(target=send_data, args=(module_name,),daemon=True).start()
但最近后台日志发现了问题:有时候程序会陷入不停刷新的死循环,紧接着我的前端页面就直接崩溃挂掉了。
拿get_groupwip_data这个模块举例子吧,其他模块的逻辑都差不多,核心结构大概是这样的:
def get_groupwip_data(): while True: # 这里是从数据库/其他数据源获取数据的逻辑 groupwip_data = get_latest_groupwip() # 通过SocketIO向前端推送更新 socketio.emit('groupwip_update', groupwip_data) time.sleep(200)
我现在有点懵,不知道问题到底出在哪:是我创建的线程太多了?还是while True加sleep的这种定时方式本身就有问题?或者是多用户连接的时候,每个用户触发connect事件都会启动一轮新线程,导致服务器资源被耗尽?有没有大佬能帮我分析下问题根源,或者给个更靠谱的实现方案呀?
备注:内容来源于stack exchange,提问作者alblmb
相关产品推荐
相关产品推荐

