并发查询时的 SQLA lchemy 异常



我为每个CPU内核构建多个进程。当我尝试测试它并从这些进程发送多个请求时,我得到一个异常:

psycopg2.OperationalError: SSL error: decryption failed or bad record mac

它在单进程模式下工作正常,但是当我构建多个进程时,会显示此错误。

这可能是因为您的进程共享同一个连接池并同时写入同一个 postgres 连接。

您没有提供太多有关如何实现多处理的信息,但如果是分叉进程,一个常见的陷阱是引擎是在分叉之前创建的,该分叉初始化与数据库的 TCP 连接,然后将其复制到新进程并导致多个进程与相同的物理套接字交互。

补救措施包括:

  • 禁用池并使用按需连接:poolclass=NullPool,
  • 在分叉后重新创建池:sqla_engine.dispose((,或
  • 将create_engine推迟到分叉之后

您可以在 postgres 配置文件上禁用 SSL。更改此行:

ssl = true

ssl = false

配置文件通常在/etc/postgresql/*.*/main/postgresql.conf

最新更新