带有@property对象的Python多处理管理器

时间:2017-10-12 17:03:02

标签: python multiprocessing

我有一个相当复杂的对象,我需要在Python中共享对跨进程的访问。它上面有一些@property方法/属性,AutoProxy似乎没有处理它们。我如何通过经理揭露这些?

from multiprocessing.managers import BaseManager

class Foo(object):

    def __init__(self, a):
        self._a = a

    @property
    def a(self):
        return self._a

class FooManager(BaseManager): pass

FooManager.register("Foo", Foo)

if __name__ == "__main__":
    fmgr = FooManager()
    fmgr.start()
    foo = fmgr.Foo(5)
    # Below causes error
    foo.a

我得到的错误是:

  

回溯(最近一次调用最后一次):文件“test.py”,第26行,in          foo.a AttributeError:'AutoProxy [Foo]'对象没有属性'a'

修改

正如下面评论中提到的,一种方法是定义:

class FooProxy(NamespaceProxy):
    _exposed_ = ('__getattribute__', '__setattr__', '__delattr__', 'a')

将Foo对象注册为:

FooManager.register("Foo", Foo, FooProxy)

虽然如果有人知道一个更自动的过程来合并任何和所有非常好的@property对象,这似乎工作正常。

0 个答案:

没有答案