并发查询时SQLAlchemy异常

时间:2017-03-15 15:57:15

标签: python postgresql sqlalchemy

我为每个cpu核心构建了多个进程。当我尝试测试它并从这些进程发送多个请求时,我得到一个例外:

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

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

2 个答案:

答案 0 :(得分:0)

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

您没有提供有关如何实现多处理的大量信息,但如果是分叉进程,则常见的缺陷是引擎在fork之前创建,它会初始化数据库的TCP连接,然后被复制转到新进程并导致多个进程与相同的物理套接字进行交互。

补救措施包括:

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

答案 1 :(得分:-1)

您可以在postgres配置文件中禁用SSL。改变这一行:

ssl = true

ssl = false

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