如何在Python中继承“Manager().list”?
我自己实现了一个名为“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().list”是代表
manager = Manager()
manager.list()
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)