我有一个相当复杂的对象,我需要在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对象,这似乎工作正常。