SSL错误:错误记录mac-使用PostgreSQL和Python多处理管理多个连接

SSL错误:错误记录mac-使用PostgreSQL和Python多处理管理多个连接,python,postgresql,psycopg2,python-multiprocessing,Python,Postgresql,Psycopg2,Python Multiprocessing,最近,为了利用更多的CPU内核,我将正在开发的软件的一些后台功能从使用Python线程模块转换为多处理模块。大部分传输都顺利进行,但数据库集成一直给我带来重大问题 最初,我使用的是Python psycopg2中的一个SimpleConnectionPool对象,它作为一个全局变量存在于一个名为db的模块中,该模块还处理一些样板数据库操作。据我所知,创建第二个Python进程只是将当前内存堆栈复制到新的进程位置。因为这会导致数据库连接出现问题,所以我在db模块中添加了一个名为init()的函数,

最近,为了利用更多的CPU内核,我将正在开发的软件的一些后台功能从使用Python线程模块转换为多处理模块。大部分传输都顺利进行,但数据库集成一直给我带来重大问题

最初,我使用的是Python psycopg2中的一个SimpleConnectionPool对象,它作为一个全局变量存在于一个名为db的模块中,该模块还处理一些样板数据库操作。据我所知,创建第二个Python进程只是将当前内存堆栈复制到新的进程位置。因为这会导致数据库连接出现问题,所以我在db模块中添加了一个名为init()的函数,该函数只需重新初始化SimpleConnectionPool并将其设置为全局变量。我的想法是,如果我在第二个进程中调用这个init函数,它将只为第二个进程上的池创建一组新的连接。因此,主进程将保持自己的连接集,与第二个进程分开

但是,使用此方法时,我经常遇到以下异常:

OperationalError: SSL error: decryption failed or bad record mac
这直接源自psycopg2_patcher.py中的“state=conn.poll()”。我做了一些挖掘,据我所知,只有当主进程和辅助进程都试图同时执行查询时,才会抛出错误。我正在考虑恢复到主进程中的一个连接池,并使用队列将查询从辅助进程传递到主进程以执行。这带来了很多头痛,虽然我宁愿避免

我还尝试从辅助进程上的连接池移开,并使用了一个仅在需要执行查询时建立的连接,然后在查询完成后直接关闭。当主进程尝试同时执行查询时,也会发生相同的错误


我需要对PGSQL server或我的实现做什么才能允许不同的进程使用相同的凭据同时发布查询?我感觉我正在以一种完全不必要和复杂的方式处理进程之间的数据库连接。

对于这个问题,我有一个优雅的答案。在这里,您可以只指定连接计数,并为您处理所有异步连接。这是ThreadedConnectionPool的修改版本


您是否查看了现有的连接池,例如?原始的psycopg2 ThreadedConnectionPool没有设置为处理多个进程,只有多个线程。您是否在修改中解决了该问题?如果是的话,我一定会试试这个。非常感谢。我使用GIPC和GEVENT来为每个CPU启动多个web服务。在这一点上,它们各自使用自己的连接池,这很好。我喜欢这样,因为我知道每个Web服务器有多少个连接,这使我能够正确地预测扩展。但是使用GIPC,您可以从进程池来回传递数据,因此理论上您可以运行多个异步Web服务并回调单个异步连接池。