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

带有@property对象的Python多处理管理器,python,multiprocessing,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

我有一个相当复杂的对象,需要在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
我得到的错误是:

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

编辑 因此,正如下面的评论中所提到的,一种方法是对其进行定义:

class FooProxy(NamespaceProxy):
    _exposed_ = ('__getattribute__', '__setattr__', '__delattr__', 'a')
并将Foo对象注册为:

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

如果有人知道一个更自动的过程来合并任何和所有@property对象,这似乎很好。

我从来没有和经理们闹过(tbh我甚至不知道有这样的事情……有点酷……)现在我有点好奇,可能会更深入一点,然而,这个答案看起来可能会让人有所了解是的,我看到了这个答案,我希望有其他方法以更自动化的方式完成它,而不是显式地公开每个属性(有很多属性)。如果没有更自动化的方法,那么我想这就是为每个单独的属性/属性做的方法。或者只是让它们不是属性,让它们成为方法,并作为方法与它们交互-这会起作用-问题是,实际的实现被许多其他假定访问正如@JoranBeasley在第一条评论中提到的帖子中指出的,我可以创建一个:FooProxy对象,并将所有属性调用添加到exposed属性中。如果有人知道一种更自动的方法,那就太好了,否则这种方法似乎是可行的。