Imm*_*ion 9 python postgresql sqlalchemy flask gunicorn
我创建了用作 WSGI 服务器的FlaskWSGI 应用程序gunicorn,用于PostgreSQL通过Flask SQLAlchemy扩展使用的 DB 。这一切都托管在Heroku.
枪炮配置
Heroku PostgreSQL 配置
对于其他一切,使用默认配置。
我收到此错误:sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: too many connections for role <id>。显然,我超出了允许的数据库连接数。
我尝试了这些东西来修复它:
poolclass为NullPool;pool_recycle为 2。即使超过 2 秒,连接数仍然相同;session.close()与engine.dispose();max_overflow = 0, SQLALchmey pool_size = 10(我收到此错误:)sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 0 reached, connection timed out, timeout 30。这一切都不起作用。即使使用最小的 gunicorn 配置(1 个具有 18 个连接的工人),我仍然收到此错误。我真的开始不明白到底发生了什么。
我认为它是这样工作的:每个工人都有自己的引擎实例,每个引擎都有自己的池大小。因此,如果有 2 个具有引擎默认配置的 worker(池大小为 5),那么我们有 2 * 5 = 10 个与 DB 的最大连接。但看起来这真的不是这个样子。
问题
SQLAlchemy池如何与gevent工人一起工作?即,我如何计算数据库连接的最大数量?抱歉问了太多问题,但这真的让我很沮丧。
在构建这个项目时,我一直在努力解决同样的问题,最终能够解决这个问题的唯一方法是将SQLAlchemy 方法返回的/对象缓存到MockConnection全局database_enginecreate_engine变量中,并重用相同的MockConnection对象(如果已经创建)。
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |