[英]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,))
然后从b
和c
内部,您可以通过以下方式发送和接收查询:
access_connection.get_query("select * from table'")
请记住,您发送到管理器进程(通过access_connection
)的所有 arguments 以及您从中接收到的所有值都需要进行挑选才能使其正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.