1
myyou 2019-01-02 17:23:53 +08:00
这个表示 mysql 连接已经断开了,SQLALCHEMY_POOL_RECYCLE 设置短一些,或者不使用连接池,去掉 SQLALCHEMY_POOL_SIZE 和 SQLALCHEMY_POOL_RECYCLE
|
2
liuzhedash 2019-01-02 17:24:20 +08:00
这要看 mysql 的 error.log 来确定问题,你改 sqlalchemy 那俩参数似乎并无根据呀?
|
3
NeverBelieveMe OP @myyou 我原来没有设置出了问题,然后才加的,加了也没用。
|
4
NeverBelieveMe OP @liuzhedash 这样啊,那我去找找看 mysql 的日志。
|
5
qq316107934 2019-01-02 17:35:22 +08:00 via Android
session 泄露没有关闭吧,用 try catch 加上下文管理器试试?
|
6
NeverBelieveMe OP @qq316107934 session 每个请求内用完都要关掉么?
|
7
qq316107934 2019-01-02 17:57:02 +08:00
@NeverBelieveMe #6 有些版本的 sqlalchemy session 池管理有问题,用完关掉不是很影响效率,而且能解决报错的问题。
|
8
xayoung 2019-01-02 17:58:59 +08:00
我是每次用完 session 关掉,才完全解决这个问题的。
|
9
est 2019-01-02 18:02:52 +08:00 2
@qq316107934
其实大家不用猜了。python 的几乎所有库的连接池都有问题 原因很简单,连接池应该在一定超时时间 idle 之后去自动重连一个的。python 的 threading、协程的状况,几乎没有一个库去实现一个 timer 主动去轮换连接。都是一个 db 操作的动作再去检查连接。然后远端主动关闭,python 的 tcp 其实是没法响应 TIME_WAIT 的。于是一发过去就 Broken pipe。。 |
11
tanszhe 2019-01-02 20:25:41 +08:00 via Android
几行代码
就能搞定的事情 |
12
fanhaipeng0403 2019-01-03 12:03:12 +08:00
db.session.close()
每次都关掉,绝对会解决 |