Python 如何调查SQLAlchemy队列池限制溢出?

Python 如何调查SQLAlchemy队列池限制溢出?,python,mysql,flask,sqlalchemy,flask-sqlalchemy,Python,Mysql,Flask,Sqlalchemy,Flask Sqlalchemy,我明白了 TimeoutError:QueuePool大小限制为5已达到溢出10,连接超时,超时30 我看到了这些问题: 以及他们的答案。我试过了,我试着用一种简单的方式重现我的问题。我无法复制它 如何查找/修复问题? 例如,我可以在Python中获取队列池的当前“使用情况”吗 (还有一个问题可能更好:为什么不将队列溢出设置为-1?) 到目前为止,我没有尝试设置app.config['SQLALCHEMY\u POOL\u RECYCLE'](待设置)。我想我必须将它设置为一个较低的值才

我明白了

TimeoutError:QueuePool大小限制为5已达到溢出10,连接超时,超时30

我看到了这些问题:

以及他们的答案。我试过了,我试着用一种简单的方式重现我的问题。我无法复制它

如何查找/修复问题?

例如,我可以在Python中获取队列池的当前“使用情况”吗

(还有一个问题可能更好:为什么不将队列溢出设置为-1?)

到目前为止,我没有尝试设置
app.config['SQLALCHEMY\u POOL\u RECYCLE']
(待设置)。我想我必须将它设置为一个较低的值才能解决这个问题,但我可能会在其他地方超时,对吗

  • 对MySQL数据库运行
    showProcessList
    ,以显示连接/池/使用情况

    • 在PyCharm中,打开“数据库”侧栏(通常在右侧),然后右键单击数据库/模式并选择“打开控制台”。粘贴上面的命令并单击绿色的“执行”按钮
    • 我注意到,当我使用API时,每个API调用都会打开一个单独的连接,当它们达到20个连接时,下一个API调用会导致错误,即
      TimeoutError:QueuePool limit of size 10 overflow 10 reated
      (10+10=20)
    • 当我摆脱
      threaded=True
      时,我只看到一个连接打开
  • 提交或隐藏所有现有更改,然后创建一个分支,开始逐条剥离代码/简化应用程序,看看问题是否仍然存在

    • 在本例中,我没有使用这种技术,但在处理其他难以追踪的bug时,我成功地使用了它
    • 既然你提到不能用一个简单的例子来重现这个问题,我认为值得推荐这种技术,作为一种获得一个最小例子的方法
  • (与#2结合使用)尝试减少
    SQLALCHEMY_POOL_大小
    Flask-SQLALCHEMY设置,以便更快地复制错误

    • 这里的想法是让崩溃发生得更快
    • 在这种情况下我没有这么做

  • 嗯,我明天再查。如果您没有
    threaded=True
    ,那么多个用户是否能够同时使用该站点(即使存在长时间运行的查询)?我的理解是,您的开发服务器将无法同时处理多个请求,但是,您的prod服务器应该使用WSGI服务器,如
    gunicorn
    uWSGI
    ,它将能够生成您的应用程序的多个实例。为了详细说明“您的产品应该使用WSGI服务器”:我查看了Flask源代码,对于
    run()
    函数,它说“不要在生产环境中使用
    run()
    。这不是为了满足生产服务器的安全性和性能要求。”您也可以看到他们在这里这样说:好,但我不使用app.run(请参阅链接)。我使用WSGIServerHmm…那么我想我能提供的就是我的“如何调查问题”提示。为了让这个问题保持主题,我将“我的情况”和“我如何解决它”部分转移到了这个问题的答案中: