小编典典

在Python中跨进程共享与postgres db的连接

python

我有一个Python脚本作为守护程序运行。在启动时,它产生5个进程,每个进程都连接到Postgres数据库。现在,为了减少数据库连接的数量(最终将变得非常大),我试图找到一种在多个进程之间共享单个连接的方法。为此,我正在研究multiprocessing.sharedctypes.ValueAPI。但是,我不确定如何psycopg2.connection使用该API在各个进程之间传递对象。谁能告诉我该怎么做?

为了解决这个问题,我也开放其他想法。

我之所以不考虑将连接作为构造函数的一部分传递给5个进程的原因是互斥处理。如果使用这种方法,我不确定如何防止多个进程访问连接。有人可以告诉我这是否正确吗?


阅读 276

收藏
2021-01-20

共1个答案

小编典典

您无法在这样的过程之间理智地共享数据库连接。您可以 排序 共享 线程
之间的连接,但是前提是您必须确保一次仅一个线程使用该连接。在进程之间这是行不通的,因为在客户端的地址空间中存储了连接的客户端状态。

如果您需要大量并发工作程序,但他们并没有一直在使用数据库,则应该有一组 数据库工作
程序进程来处理所有数据库访问并与其他工作程序进程交换数据。每个数据库工作进程都有一个数据库连接。其他进程仅通过数据库工作程序与数据库对话。

Python的多处理队列,fifos等为此提供了适当的消息传递功能。

2021-01-20