1 dongxiao 2020-12-10 11:27:40 +08:00 via Android 我用的 sqlalchemy,采用的方法是设置超时后把 session 设成 global,然后开了个多线程在超时前销毁 session 并重建,用的地方 import 这个包就行 |
2 yagamil 2020-12-10 13:16:54 +08:00 持久化连接池 |
![]() | 3 jayzau1973 OP @dongxiao 我在想难道每个写后端的都要这样搞吗,感觉不太合理。PHP 就不用自己去优化 |
![]() | 4 jayzau1973 OP @yagamil 连接池倒是有 `PooledMySQLDatabase`,但好像无法持久化... |
![]() | 5 676529483 2020-12-10 14:35:07 +08:00 数据库连接要在请求结束时关闭,或者交还给连接池,要主动释放资源,flask 可以通过钩子做 |
![]() | 6 wewin 2020-12-10 18:53:35 +08:00 大概过了多久?我记得 mysql 连接,闲置 8 小时会断开 |
7 zhanglintc 2020-12-10 19:14:34 +08:00 初始化应该有个自动重连的参数可以设置,找找文档看看呢 |
![]() | 8 MaxFang 2020-12-10 20:19:06 +08:00 @jayzau1973 非优化过的框架里面,php 也是没有超时自动重连的吧。一般 mysql 默认连接 8 小时。以前踩过类似的坑。 |
9 littlewing 2020-12-10 22:39:51 +08:00 via iPhone 把数据库的超时断开连接时间调大 |
![]() | 10 jayzau1973 OP |
![]() | 11 jayzau1973 OP @MaxFang 嘿嘿嘿 PHP 就接触过一点 laravel 框架 |
![]() | 12 jayzau1973 OP @zhanglintc 好的我看看 |
13 Rache1 2020-12-11 09:43:01 +08:00 Laravel 是有自动重连的 \Illuminate\Database\DetectsLostConnections::causedByLostConnection |
![]() | 14 daytonight 2020-12-11 12:21:59 +08:00 使用前 ping 一次 mysql,失败则重新建立连接,sqlalchemy 可以设置 pool_pre_ping 参数。 |
![]() | 15 meshell 2020-12-11 13:58:10 +08:00 发个 select 1 呗然后重连 |
![]() | 16 viiii 2021-01-21 05:08:17 +08:00 不知道楼主解决这个问题没有? 一样在这里被卡住了 |
![]() | 17 jayzau1973 OP ![]() @viiii 没呢 断了手动重启- - |