在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类的对象,并注册新类对象。