漳州市住房与城乡建设部网站网站建设的工作

张小明 2026/1/8 13:46:40
漳州市住房与城乡建设部网站,网站建设的工作,成品网站建设流程图,网站管理方案从报错截图来看#xff0c;核心错误信息是#xff1a; mysql.connector.errors.OperationalError: 1040 (08004): Too many connections 这意味着你的 Python 程序#xff08;具体是在 Streamlit 框架下运行#xff09;向 MySQL 数据库发起了过多的连接请求#xff0c;超出…从报错截图来看核心错误信息是mysql.connector.errors.OperationalError: 1040 (08004): Too many connections这意味着你的 Python 程序具体是在 Streamlit 框架下运行向 MySQL 数据库发起了过多的连接请求超出了数据库允许的最大并发连接数默认为 151并且之前的连接没有被及时关闭。为什么会发生这种情况连接未关闭Connection Leak代码中打开了数据库连接connect()但在使用完后没有调用conn.close()。Streamlit 的运行机制我注意到报错路径中有streamlit。Streamlit 的特点是每当用户与页面交互点击按钮、刷新等时整个 Python 脚本会从头到尾重新运行一次。看你的代码位置utils\scm_db.py第 9 行直接执行了conn mysql.connector.connect(...)。每次页面刷新这行代码就运行一次创建一个新连接。旧连接还在占用资源新连接不断增加很快就耗尽了 MySQL 的连接池。解决方案方案一使用 Streamlit 的缓存机制推荐最适合你的场景在 Streamlit 中数据库连接应该被缓存确保整个应用只创建一次连接而不是每次刷新都创建。修改utils/scm_db.pyimportmysql.connectorimportstreamlitasst# 你的 Settings 导入# 使用 st.cache_resource 装饰器确保连接只被创建一次st.cache_resourcedefinit_connection():returnmysql.connector.connect(hostSettings.DB_HOST,userSettings.DB_USER,passwordSettings.DB_PASSWORD,databaseSettings.DB_NAME)# 在其他文件中调用时# conn init_connection()注意st.cache_resource是 Streamlit 新版的方法旧版可能叫st.experimental_singleton。方案二确保连接即用即关标准做法如果你不需要长连接应当在查完数据后立刻关闭连接。最好使用try...finally或者上下文管理器。# 修改你的调用逻辑defget_data():connNonecursorNonetry:connmysql.connector.connect(host...,...)# 建立连接cursorconn.cursor()# 执行查询cursor.execute(SELECT * FROM ...)resultcursor.fetchall()returnresultexceptExceptionase:print(e)finally:# 无论是否报错这里都会执行确保关闭连接ifcursor:cursor.close()ifconn:conn.close()方案三临时解决重启服务为了立刻让程序能跑起来你需要清除当前占满的“僵尸”连接重启 MySQL 服务这会强制断开所有现有连接。Windows: 在“服务”中找到 MySQL 并重启。Linux:sudo service mysql restart重启 Streamlit 应用关闭终端里的 Streamlit 进程并重新运行。方案四增加 MySQL 最大连接数治标不治本如果你的应用确实需要很高并发通常开发环境不需要可以在 MySQL 中修改配置。登录 MySQL 命令行。执行命令查看当前限制SHOW VARIABLES LIKE max_connections;临时修改限制例如改为 1000SET GLOBAL max_connections 1000;总结问题出在Streamlit 每次刷新页面都重新执行了连接数据库的代码且没有关闭旧连接。请优先采用方案一进行代码优化。这是一个非常好的问题触及了 SQLAlchemy通常配合 pandas 使用的核心机制——连接池Connection Pooling。简单直接的回答是算一次连接吗是的它会占用或者建立一个与数据库的会话。如何关闭你不需要也不能手动关闭它。只要你传给read_sql的是enginepandas 会自动处理“借出连接”和“归还连接”的操作。但结合你之前遇到的Too many connections报错这里有很深的“坑”请仔细看下面的分析一、pd.read_sql的内部机制当你执行如下代码时importpandasaspdfromsqlalchemyimportcreate_engine# 假设 engine 已经创建好dfpd.read_sql(SELECT * FROM table,engine)Pandas 内部其实做了以下事情向 Engine 申请连接它调用engine.connect()。连接池机制如果连接池里有空闲连接Engine 直接把旧连接拿来用速度快MySQL 看来连接数没变。如果连接池是空的Engine 会创建一个新的物理连接MySQL 的Threads_connected1。执行 SQL利用这个连接读取数据。自动关闭归还数据读取完毕后Pandas 会自动调用连接的.close()方法。关键点来了对于 SQLAlchemy 的 Engine 来说.close()并不代表断开 TCP 连接而是代表**“把连接还给连接池”。所以在 MySQL 服务端看来这个连接依然是连着Sleep**的状态等待下一次被复用。二、 既然自动关闭为什么还会报错既然read_sql会自动归还连接为什么你还会遇到连接数过多的报错罪魁祸首还是 Streamlit 的刷新机制。如果你的代码是这样写的在 Streamlit 中# 错误写法每次刷新页面都会运行这几行enginecreate_engine(mysqlmysqlconnector://user:passhost/db)dfpd.read_sql(SELECT * FROM table,engine)发生了什么第 1 次刷新创建了Engine对象_A自带一个连接池。read_sql建立了一个连接Conn_1。用完后Conn_1 回到了Engine对象_A的池子里。第 2 次刷新脚本重新运行创建了Engine对象_B自带新的连接池。read_sql建立了一个连接Conn_2。用完后Conn_2 回到了Engine对象_B的池子里。问题Engine对象_A虽然被 Python 变量抛弃了但它建立的 Conn_1 还在 MySQL 那边挂着直到 Python 进行垃圾回收GC或者 MySQL 超时这个连接才会断。第 1000 次刷新你创建了 1000 个 Engine 对象MySQL 里挂了 1000 个 Sleep 的连接 ——BOOM! Too many connections.三、 正确的解决方案你要做的不是“手动关闭连接”而是**“防止重复创建 Engine”。你需要让整个 Streamlit 应用无论刷新多少次全局只使用同一个** Engine 对象。写法 1使用 Streamlit 缓存 Engine强烈推荐修改你的utils/scm_db.py或相关文件importpandasaspdfromsqlalchemyimportcreate_engineimportstreamlitasst# 使用 st.cache_resource 装饰器# 这告诉 Streamlit这个函数的返回值engine要存起来缓存# 下次再调用这个函数直接返回存起来的那个不要重新执行内部代码。st.cache_resourcedefget_db_engine():# 这里填写你的连接字符串enginecreate_engine(mysqlmysqlconnector://root:passwordhost:3306/db_name)returnengine# 在主程序中使用defmain():# 获取唯一的 engine 实例engineget_db_engine()# 放心读取由 Engine 自动管理连接池dfpd.read_sql(SELECT * FROM my_table,engine)st.dataframe(df)写法 2如果不使用缓存不推荐如何强制销毁如果你实在不想用缓存通常不建议你必须显式地销毁 Engine 以断开物理连接enginecreate_engine(...)try:dfpd.read_sql(sql,engine)finally:# 强制销毁 Engine这会切断池子里所有的物理连接engine.dispose()总结pd.read_sql(sql, engine)会自动处理连接的开启和关闭归还给池子你不需要手动写conn.close()。你的报错是因为重复创建了太多 Engine 对象每个对象后面都拖着一堆空闲连接没断开。解决方法使用st.cache_resource缓存create_engine的结果确保全局只有一个 Engine。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

河北省城乡规划建设局官方网站google秒收录方法

LLaMA-Factory实战指南:零代码微调属于你的大模型 你有没有想过,只需几条命令甚至点点鼠标,就能让Llama-3这样的顶尖大模型学会写电商文案、扮演专属客服、或是掌握医疗术语?这不再是实验室里的黑科技。随着LLaMA-Factory这类集成…

张小明 2026/1/7 2:22:24 网站建设

不中网站建设公司坑恒一信息深圳网站建设公司2

文章目录1. 实战概述2. 实战步骤2.1 下载Nginx镜像2.2 创建项目目录2.3 创建主页文件2.4 创建Dockerfile文件2.5 利用Dockerfile构建镜像2.6 利用新镜像生成容器并测试3. 实战总结1. 实战概述 本实战通过 Dockerfile 自定义 Nginx 镜像,完成项目目录创建、主页文件…

张小明 2026/1/7 2:21:20 网站建设

桓台网站建设c2c网站价格

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业级解决方案,用于管理SOLIDWORKS STANDARD许可资源。功能包括:1. 许可使用情况实时监控;2. 许可分配和回收自动化;3. 用…

张小明 2026/1/7 2:20:48 网站建设

成都网站建设四川冠辰网站建设全总基层组织建设网站

当你的ESP32“开口说话”:用MQTT打造真正智能的家庭通信网络你有没有过这样的体验?半夜醒来,想开灯却要摸黑找开关;出门后突然怀疑自己是否关了空调;或者家里的温湿度传感器数据总是延迟刷新……这些看似琐碎的问题&am…

张小明 2026/1/7 2:20:17 网站建设

常州免费做网站深圳市建筑市场信息公开平台

deepin-wine实战评测:从零体验Linux系统上Windows应用的完美运行 【免费下载链接】deepin-wine 【deepin源移植】Debian/Ubuntu上最快的QQ/微信安装方式 项目地址: https://gitcode.com/gh_mirrors/de/deepin-wine 还在为Linux平台无法使用日常必备的Windows…

张小明 2026/1/7 2:19:12 网站建设

专业建网站 成都注册个网站多少钱

互联网服务实用指南 在互联网的使用过程中,我们常常会涉及到文件传输、新闻阅读、系统和用户活动查询以及消息发送等操作。下面将为大家详细介绍这些操作的相关知识和具体方法。 1. 文件传输 在进行文件传输时,FTP(文件传输协议)是常用的工具。默认情况下,本地系统的当…

张小明 2026/1/7 2:18:40 网站建设