python中通过manager类,使得进程间共享类对象

在python中,我们希望不同的子进程之间,可以共享某个类对象,并且对该类对象进行修改,此时,我们便需要使用manager类来实现这一目标。manager类的本质是一个服务器代理对象,当不同的进程去访问该对象的时候,实际上是向代理服务器发送了访问请求,修改后,又将改变发送给服务器。

manager的使用方法一般为:

使用一个新类继承BaseManager类(import from multiprocessing.managers)

将需要共享的类对象注册在类中:

如:BaseManager.register('List', List)

并且创建manager对象,并开始运行:

manager = BaseManager()

manager.start()

list = manager.List()

当然以上为举例,在实际中,队列,等数据结构都已经封装在了manager中,并不需要注册,可以直接使用。

不过在使用这个功能时,有个坑需要注意,即由manager建立的类对象,只能访问其成员函数,而不能直接访问其成员变量,这就需要将类对象的所有成员变量的改变,分装为函数,而不能随意直接访问。

其次需要注意的是,当我们使用同一个manager, 并在其中注册不同的类对象之后,在不同的地方定义manager对象,可能会产生未知的错误,因此最好的方式应该为,在什么地方定义一个manager对象,就在什么地方定义一个新的继承自BaseManager类的对象,并注册新类对象。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于 Python 进程共享对象的问题。在 Python ,我们可以通过使用 `multiprocessing.Manager` 来创建一个自定义的共享对象管理器。这个管理器可以管理一些共享的对象,比如列表、字典、队列等等。 首先,我们需要导入相关的模块: ```python from multiprocessing import Process, Manager ``` 然后,我们可以创建一个自定义的共享对象管理器: ```python manager = Manager() ``` 接着,我们可以使用这个管理器来创建共享对象,比如一个共享列表: ```python shared_list = manager.list() ``` 现在,我们就可以在多个进程共享这个列表了。比如,我们可以创建两个进程来同时向这个列表添加元素: ```python def add_element(shared_list, element): shared_list.append(element) if __name__ == '__main__': shared_list = manager.list() p1 = Process(target=add_element, args=(shared_list, 1)) p2 = Process(target=add_element, args=(shared_list, 2)) p1.start() p2.start() p1.join() p2.join() print(shared_list) ``` 这个例子,我们创建了两个进程 `p1` 和 `p2`,它们都会调用 `add_element` 函数来向共享列表添加元素。最后,我们打印出这个共享列表的内容,可以看到它包含了元素 1 和 2。 这就是一个简单的 Python 进程共享对象的示例。通过使用 `multiprocessing.Manager` ,我们可以轻松地创建自定义的共享对象管理器,并在多个进程共享对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值