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

发布于 2021-01-29 15:05:29

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

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

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

关注者
0
被浏览
74
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看