繁体   English   中英

Python 在独立进程之间共享对象

[英]Python share objects between independent processes

我有 3 个脚本文件,a.py、b.py 和 c.py。 a.py 用于启动 b.py 和 c.py。

我在 a.py 中有一个 SQL/SQLite/SQLcipher 连接。 我正在寻找一种与 b/c.py 共享该连接的方法,以便每个人都可以向 a.py 发送查询,并且 a.py 返回结果。

我一直在查看 sockets 和 multiprocessing shared_memory 但两者似乎都需要一个大小,根据查询,大小可以从几 kb 到 100+Mb 不等。

那么是否可以共享 memory 地址和大小,以便在不同的 shell 中运行的第二个 python 进程可以访问该内存/对象?

快速示例伪代码:

b.py -> memory.query("select * from table'") -> a.py
a.py -> q(memory.query): memory.results= cur.exe(memory.query) -> b.py 
b.py -> print(memory.results)

您可以在此处使用管理器 但是,不是在a.py中创建 sql 连接,而是在单独的管理器进程中创建连接,并允许通过代理访问该 object。 这是一个例子:

from multiprocessing import Process, BaseManager
from c import main_c
from b import main_b


class AccessConnection:
    def __init__(self, connection):
        self.connection = connection

    def get_query(self, query):
        return self.connection.get_query(query)

    # You can include other possible functions you want to allow processes to access

def create_my_sql_connection(*args, **kwargs):
    connection = None  # Initialize your SQL connection
    return AccessConnection(connection)

if __name__ == "__main__":
    BaseManager.register("create_my_sql_connection", create_my_sql_connection)
    manager = BaseManager.start()

    access_connection = manager.create_my_sql_connection()  # Create and store your connection in another process

    # Start a and b
    proc_b = Process(main_b, args=(access_connection, ))
    proc_c = Process(main_c, args=(access_connection,))

然后从bc内部,您可以通过以下方式发送和接收查询:

access_connection.get_query("select * from table'")

请记住,您发送到管理器进程(通过access_connection )的所有 arguments 以及您从中接收到的所有值都需要进行挑选才能使其正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM