Python 在多处理过程中共享大型任意数据结构

Python 在多处理过程中共享大型任意数据结构,python,multiprocessing,Python,Multiprocessing,我想用python并行化一个进程,该进程需要对几个大型非数组数据结构进行读访问。在不将所有大型数据结构复制到每个新流程中的情况下,建议采用什么方法来实现这一点 谢谢多处理软件包提供了两种共享状态的方法:共享内存对象和服务器进程管理器。您应该使用服务器进程管理器,因为它们支持任意对象类型 以下程序使用服务器进程管理器: #!/usr/bin/env python3 from multiprocessing import Process, Manager # Simple data struct

我想用python并行化一个进程,该进程需要对几个大型非数组数据结构进行读访问。在不将所有大型数据结构复制到每个新流程中的情况下,建议采用什么方法来实现这一点


谢谢

多处理软件包提供了两种共享状态的方法:共享内存对象和服务器进程管理器。您应该使用服务器进程管理器,因为它们支持任意对象类型

以下程序使用服务器进程管理器:

#!/usr/bin/env python3

from multiprocessing import Process, Manager

# Simple data structure
class DataStruct:
    data_id = None
    data_str = None
    
    def __init__(self, data_id, data_str):
        self.data_id = data_id
        self.data_str = data_str

    def __str__(self):
        return f"{self.data_str} has ID {self.data_id}"

    def __repr__(self):
        return f"({self.data_id}, {self.data_str})"

    def set_data_id(self, data_id):
        self.data_id = data_id

    def set_data_str(self, data_str):
        self.data_str = data_str

    def get_data_id(self):
        return self.data_id 

    def get_data_str(self):
        return self.data_str


# Create function to manipulate data
def manipulate_data_structs(data_structs, find_str):
    for ds in data_structs:
        if ds.get_data_str() == find_str:
            print(ds)

# Create manager context, modify the data
with Manager() as manager:

    # List of DataStruct objects
    l = manager.list([
        DataStruct(32, "Andrea"),
        DataStruct(45, "Bill"),
        DataStruct(21, "Claire"),
    ])

    # Processes that look for DataStructs with a given String
    procs = [
        Process(target = manipulate_data_structs, args = (l, "Andrea")),
        Process(target = manipulate_data_structs, args = (l, "Claire")),
        Process(target = manipulate_data_structs, args = (l, "David")),
    ]

    for proc in procs:
        proc.start()

    for proc in procs:
        proc.join()

有关更多信息,请参阅文档中的。

可能会有所帮助。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-说得好,我将尝试结合一个简单的例子。