python - 如何在python中继承 "Manager().list"?

标签 python list inheritance multiprocessing

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

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()

最佳答案

根据@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)

关于python - 如何在python中继承 "Manager().list"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225737/

相关文章:

c++ - 继承抽象基接口(interface)及其实现给出 C2259

python - 使用 Python 比较两个文件夹中的文件

c# - 获取列表的 "running average"

java - 继承java "cannot find symbol"

python - 将一个句子分成两部分并将它们作为 Python 中的键和值存储到 defaultdict 中

c# - 使用列表 AddRange 时如何删除重复值? C#

c++ - 不能调用基类保护函数?

python - 单元测试调用 vim 子进程的 python 函数

python - 如何找到两个图像之间的相关性

javascript - 上传多个文件并显示进度条