通过透视代理传递多个对象(复杂类型)

2 投票
1 回答
640 浏览
提问于 2025-04-17 11:54

每当我尝试把一个对象(aClass)传递给另一个对象(bClass)时,我都会遇到这个问题:

Unpersistable('无法保存的数据:amodule.bClass的实例被认为是不安全的')

aClass是可以复制的,并且是“可解冻”的,而bClass则不是。

这是我的代码:

server.py:

from twisted.application import internet, service
from twisted.spread import pb
from amodule import PBServer

application = service.Application("Test app")

# Prepare managers
clientManager = internet.TCPServer(8282, pb.PBServerFactory(PBServer()));
clientManager.setServiceParent(application)

if __name__ == '__main__':
    print "Run with twistd"
    import sys
    sys.exit(1)

amodule.py:

from twisted.spread import pb

class bClass:
    """This is not a Copyable class
    """

class aClass(pb.RemoteCopy, pb.Copyable):
    b = bClass()
pb.setUnjellyableForClass(aClass, aClass)

class PBServer(pb.Root):
    def remote_echo(self, a):
        return a.b

有没有办法把aClass和它能包含的所有对象都“解冻”呢?因为解冻包含的对象很麻烦,可能会导致代码变得很乱……

1 个回答

2

你应该使用 setUnjellyableForClass

setUnjellyableForClass(bClass, bClass) 

并让 bClass 继承自 Copyable。

可以看看 传递复杂类型

撰写回答