flask_sqlalchemy MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))

2019-01-02 17:15:26 +08:00
 NeverBelieveMe
这个问题有大佬碰到过么?不知道怎么解决,网上搜了 SQLALCHEMY_POOL_SIZE,SQLALCHEMY_POOL_RECYCLE 这两个参数设定的方案也不成功。现在不太清楚怎么解决。而且也不明白什么原因导致的问题。
2881 次点击
所在节点    Python
12 条回复
myyou
2019-01-02 17:23:53 +08:00
这个表示 mysql 连接已经断开了,SQLALCHEMY_POOL_RECYCLE 设置短一些,或者不使用连接池,去掉 SQLALCHEMY_POOL_SIZE 和 SQLALCHEMY_POOL_RECYCLE
liuzhedash
2019-01-02 17:24:20 +08:00
这要看 mysql 的 error.log 来确定问题,你改 sqlalchemy 那俩参数似乎并无根据呀?
NeverBelieveMe
2019-01-02 17:33:03 +08:00
@myyou 我原来没有设置出了问题,然后才加的,加了也没用。
NeverBelieveMe
2019-01-02 17:33:24 +08:00
@liuzhedash 这样啊,那我去找找看 mysql 的日志。
qq316107934
2019-01-02 17:35:22 +08:00
session 泄露没有关闭吧,用 try catch 加上下文管理器试试?
NeverBelieveMe
2019-01-02 17:52:57 +08:00
@qq316107934 session 每个请求内用完都要关掉么?
qq316107934
2019-01-02 17:57:02 +08:00
@NeverBelieveMe #6 有些版本的 sqlalchemy session 池管理有问题,用完关掉不是很影响效率,而且能解决报错的问题。
xayoung
2019-01-02 17:58:59 +08:00
我是每次用完 session 关掉,才完全解决这个问题的。
est
2019-01-02 18:02:52 +08:00
@qq316107934

其实大家不用猜了。python 的几乎所有库的连接池都有问题

原因很简单,连接池应该在一定超时时间 idle 之后去自动重连一个的。python 的 threading、协程的状况,几乎没有一个库去实现一个 timer 主动去轮换连接。都是一个 db 操作的动作再去检查连接。然后远端主动关闭,python 的 tcp 其实是没法响应 TIME_WAIT 的。于是一发过去就 Broken pipe。。
Joe0920
2019-01-02 20:20:27 +08:00
@est 那应该咋解决?就是有那种好久没人使用的系统,一来又一顿猛着用那种
tanszhe
2019-01-02 20:25:41 +08:00
几行代码
就能搞定的事情
fanhaipeng0403
2019-01-03 12:03:12 +08:00
db.session.close()

每次都关掉,绝对会解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/523180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX