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と@MartijnPietersからの提案によると、私はなんとか解決策を得ることができました

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 に答える