首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >烧瓶,金牛(gevent),sqlalchemy (postgresql):太多连接

烧瓶,金牛(gevent),sqlalchemy (postgresql):太多连接
EN

Stack Overflow用户
提问于 2020-04-13 21:37:26
回答 1查看 2.1K关注 0票数 13

我创建了Flask WSGI应用程序,它使用gunicorn作为WSGI服务器,对于DB,它通过Flask SQLAlchemy扩展使用PostgreSQL。这些都是在Heroku上托管的。

gunicorn配置

  • 工人人数:2人;
  • 连接工人人数:1024人;
  • 线程数: 1;
  • 工薪阶层: gevent。

Heroku PostgreSQL configuration

  • 最大连接数: 20。

对于其他一切,都使用默认配置。

我得到了一个错误:sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: too many connections for role <id>。显然,我超过了允许的DB连接数。

我试过这些东西来修复它:

  • 对于SQLAlchemy将poolclass设置为NullPool
  • 对于SQLAlchmey,将pool_recycle设置为2。即使在超过2秒之后,连接的数量仍然相同;
  • session.close()engine.dispose()
  • 工人人数- 2,工人连接数- 9;
  • 工人人数- 1,工人连接数- 18;
  • 工人人数- 1,工人连接数- 10,SQLAlchemy max_overflow = 0,SQLALchmey pool_size = 10 (我得到这个错误:sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 0 reached, connection timed out, timeout 30)。

这些都不管用。我仍然得到这个错误,即使是最低配置(一个工人与18个连接)。我真的开始不明白到底发生了什么。

我认为它是这样工作的:每个工人都有自己的引擎实例,每个引擎都有自己的池大小。因此,如果有两个带有引擎默认配置(池大小为5)的工作人员,那么我们有2*5= 10到DB的最大连接。但看起来真的不是这样的。

问题

  • 如何修复此错误?
  • SQLAlchemy池如何与gevent工作人员一起工作?也就是说,如何计算最大的DB连接数?
  • 我应该如何正确地配置它,使其按预期工作?

很抱歉有太多的问题,但这真的让我很沮丧。

EN

回答 1

Stack Overflow用户

发布于 2022-08-24 13:27:25

在构建这个项目时,我一直在努力解决同样的问题,而我最终能够解决这个问题的唯一方法是将create_engine方法转化为全局变量如果它已被创建,则为

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61197228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档