如何在python中继承“Manager()。list”?

时间:2013-03-05 14:02:09

标签: python list inheritance multiprocessing

我已经实现了自己的“DataSet”类,它继承自list,我需要将该代码移植到多处理模式下运行。以下是我班级的一个样本:

class DataSet(list):
    @property
    def n_training(self):
        return len(self) * 0.8
    @property
    def n_validation(self):
        return len(self) * 0.2

除了在这个类中创建“Manager()。list”的实例之外,还有更简单的方法可以这样做:

from multiprocessing import Manager
class DataSet(Manager().list):

请注意“经理()。列表”是

的表示
manager = Manager()
manager.list()

1 个答案:

答案 0 :(得分:1)

根据@senderle和@Martijn Pieters的建议,我设法得到a solution

from multiprocessing.managers import BaseManager
from multiprocessing.managers import BaseProxy

class DataSetClass(list):
    @property
    def n_training(self):
        return len(self) * 0.8
    @property
    def n_validation(self):
        return len(self) * 0.2

class DataSetProxy(BaseProxy):
    _exposed_ = ('append', '__len__')
    def append(self, item):
        return self._callmethod('append', item)
    def __len__(self):
        return self._callmethod('__len__')

class MyManager(BaseManager):
    pass

MyManager.register('DataSet', DatasetClass, DataSetProxy)

if __name__ == '__main__':
    manager = MyManager()
    manager.start()
    dataset = manager.DataSet()
    dataset.append('item1')
    dataset.append('item2')
    print len(dataset)