我已经实现了自己的“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()
答案 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)