【问题标题】:SQLAlchemy exception while concurrent queries并发查询时出现 SQLAlchemy 异常
【发布时间】:2017-08-06 11:46:09
【问题描述】:
我为每个 cpu 核心构建多个进程。当我尝试测试它并从这些进程发送多个请求时,我得到一个异常:
psycopg2.OperationalError: SSL error: decryption failed or bad record mac
它在单进程模式下工作正常,但是当我构建多个进程时,会显示此错误。
【问题讨论】:
标签:
python
postgresql
sqlalchemy
【解决方案1】:
这可能是因为您的进程共享同一个连接池并同时写入同一个 postgres 连接。
您没有提供太多关于如何实现多处理的信息,但如果是分叉进程,一个常见的缺陷是引擎是在分叉之前创建的,它会初始化与数据库的 TCP 连接,然后将其复制转移到新进程并导致多个进程与相同的物理套接字交互。
补救措施包括:
- 禁用池并使用按需连接:poolclass=NullPool,
- fork 后重新创建池:sqla_engine.dispose(),或
- 将 create_engine 延迟到分叉之后
【解决方案2】:
您可以在 postgres 配置文件上禁用 SSL。更改此行:
ssl = true
到
ssl = false
配置文件通常在/etc/postgresql/*.*/main/postgresql.conf