转载 

sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached ...

分类:python,Mysql    1239人阅读    IT小君  2022-11-20 21:37

解决方法1:在代码中添加以下方法。

 @app.teardown_appcontext

    def shutdown_session(exception=None):

        db.session.remove()

它将自动关闭所有未使用的/挂起的连接,并防止代码中的瓶颈。特别是当您使用以下语法:Model.query.filter,通过(attribute=var).first()和关系/延迟加载来过滤。

 

问题产生

flask程序使用sqlalchemy或flask-sqlalchemy运行一段时间后,会报该错误

 

sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30 (Background on this error at: http://sqlalche.me/e/3o7r)

 

问题产生原因分析

产生该问题的原因有种,并发太高等都可能引起该错误,

 

还有一个典型的错误原因是,在客户端发送一个请求后, flask后台执行一个数据库操作,随后进行某种逻辑操作,如果该逻辑出现错误,会为客户端返回500错误码,此时该连接未释放,因此会导致数据库连接池继续占用。如下代码

 

@web.route("/test_error")

def test_error():

    print("-----------------error times "+ str(datatemp.error_counter)+"------------")

    datatemp.error_counter += 1

    sites = Site.query.filter().all()

    r = requests.get('http://github.com', timeout=0.001)

    return "error times "+ str(datatemp.error_counter)

requsts.get会必定报错,该逻辑之前 执行了查询操作,因此不会释放连接。

 

向/test_error连续发送20个请求,就会出现连接池错误。

 

解决方案2  增加连接池

操作如链接所示:增加连接池

 

该解决方案仅仅适合由于用户高并发引起的该问题,对于本文所述情况,该解决方案仅仅能延缓该问题,无法解决该问题。

 

解决方案3 增加try_except

在可能出错的语句,增加try字段

 

如上述代码可以修改为

 

@web.route("/test_error")

def test_error():

    print("-----------------error times "+ str(datatemp.error_counter)+"------------")

    datatemp.error_counter += 1

    sites = Site.query.filter().all()

    try:

        r = requests.get('http://github.com', timeout=0.001)

    except:

        r = None

    return "error times "+ str(datatemp.error_counter)

可以解决本文所述情况引起的连接池错误,但是时间成本过长,尤其项目规模较大时

 

解决方案4 使用redis

这个解决思路来源于Stack Overflow,本人尚未验证,

理论上来说即为可行,可以解决高并发,本问所述问题等

点击广告,支持我们为你提供更好的服务

css鼠标跟随文字模糊特效

小众时尚单品在线电子商务网站模板

html5 canvas彩色碎片组合球形旋转动画特效

css+js实现的颜色渐变数字时钟动画特效

jQuery右端悬浮带返回顶部特效

HTML5现代家居装潢公司网站模板

html5 svg夜空中星星流星动画场景特效

响应式太阳能能源公司网站模板

HTML5数字产品服务公司网站模板

响应式咖啡饮品宣传网站模板

响应式时尚单品在线商城网站模板

有机水果蔬菜HTML5网站模板

网页设计开发公司网站模板

HTML5 Canvas竖直流动线条背景动画特效

中小型创意设计服务公司网站模板

html5图标下拉搜索框自动匹配代码

canvas炫酷鼠标移动文字粒子特效

现代时尚家具公司网站模板

html5 canvas进度条圆环图表统计动画特效

js+css3抽奖转盘旋转点餐代码

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务