3

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

为了解决这个问题,我也愿意接受其他想法。

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

4

1 回答 1

11

您不能在这样的进程之间明智地共享数据库连接。您可以在线程之间共享一个连接,但前提是您确保该连接一次仅由一个线程使用。这在进程之间不起作用,因为存储在客户端地址空间中的连接存在客户端状态。

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

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

于 2014-09-27T07:11:33.543 回答