Многопроцессорная обработка Python: обновление атрибута общего экземпляра с помощью менеджера.Общие способы не работают - PullRequest
0 голосов
/ 17 декабря 2018

В Python 3.7 я хотел бы создать экземпляр и поделиться и обновить между двумя процессами.Я пробовал multiprocessing.manager, но обнаружил, что атрибуты общего экземпляра не обновляются.Я искал много тем, но не нашел эффективного решения.Пример кода прилагается следующим образом.

class test(object):
    def __init__(self):
        self.data = [2,3,4]

    def run(self):
        while self.data[-1] < 10:
            #update the data every 1 seconds with 1 increment
            time.sleep(1) 
            self.data.append(self.data[-1]+1)
            print(self.data)

class TestProxy(NamespaceProxy):
    # We need to expose the same __dunder__ methods as NamespaceProxy,
    # in addition to the b method.
    _exposed_ = ('__getattribute__', '__setattr__', '__delattr__', 'b')

    def b(self):
        callmethod = object.__getattribute__(self, '_callmethod')
        return callmethod('b')

if __name__ == '__main__':
    BaseManager.register('test',test,TestProxy)
    manager = BaseManager()
    manager.start()
    inst = manager.test()
    inst.run()
    print ('The actual instance data is ...............')
    print(inst.data)

Вывод на консоль следующий:

[2, 3, 4, 5]
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
The actual inst data is ...............
[2, 3, 4]     #I expect to see [2, 3, 4, 5, 6, 7, 8, 9, 10]

Мне интересно, почему экземпляр атрибута inst не обновляется.Есть ли простой способ изменить код, чтобы заставить код работать?

...