3

我已经实现了我自己的从列表继承的“DataSet”类,我需要移植该代码以在多处理模式下运行。这是我的课堂示例:

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().list”是

manager = Manager()
manager.list()
4

1 回答 1

2

根据@senderle 和@Martijn Pieters 的建议,我设法得到了解决方案

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)
于 2013-03-06T09:50:23.230 回答