首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError与Pyro4

AttributeError与Pyro4
EN

Stack Overflow用户
提问于 2015-11-22 13:58:31
回答 1查看 720关注 0票数 1

我试图用Pyro4发送一个对象。这是我的服务器代码:

代码语言:javascript
复制
class Player(object):

    def __init__(self, name='', clazz=C_SPEC):
        self.name = 'name'



class Game(object):
    def playeradd(self):
        '''Add spectator'''
        player = Player()
        ob = cPickle.dumps(player);
        return ob  

theGame = Game()

with Pyro4.core.Daemon() as daemon:
    uri = daemon.register(theGame)
    print uri
    daemon.requestLoop()

我的客户看起来是这样的

代码语言:javascript
复制
     game = Pyro4.core.Proxy('PYRO:obj_ffbed0ab21894952ba941246fa5e1365@localhost:59639')
pl= cPickle.loads(str(game.playeradd())) 
print pl     

我得到了一个错误: AttributeError:‘模块’对象没有属性'Player‘

有什么意见吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 21:48:50

您不能只在客户端代码中解锁已被腌制的对象。与所有的泡菜一样,只有对象的状态被腌制并通过导线发送。要解开它,您的代码需要访问与对象来自服务器端的相同模块中的同一个类。也就是说,您必须复制在客户端和服务器上定义Player对象的模块。

但是,我认为您确实希望实现其他目标:您似乎希望在您的服务器中创建一个旁观者玩家,并通过客户端代码与其交互。这不能以您在这里尝试的方式来完成:您的客户端中的对象将是您在服务器中所提取的对象的副本,并且是独立的。您必须返回一个代理,而不是实际的对象(或它的一个泡菜)。但我建议您研究一下Pyro4 4的自动代理机制。请参阅https://pythonhosted.org/Pyro4/servercode.html#autoproxying,并查看Pyro4附带的autoproxy示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33855587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档