AttributeError с Pyro4

Я пытаюсь отправить объект с помощью Pyro4. Это мой код сервера:

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()

И мой клиент выглядит так:

     game = Pyro4.core.Proxy('PYRO:obj_ffbed0ab21894952ba941246fa5e1365@localhost:59639')
pl= cPickle.loads(str(game.playeradd())) 
print pl     

Я получаю эту ошибку: AttributeError: объект 'module' не имеет атрибута 'Player'

Есть мнение?


person Aygül Salahlı    schedule 22.11.2015    source источник
comment
В какой строке возникает ошибка? Кроме того, вы можете просто использовать Pyro4.Proxy(...) и Pyro4.Daemon() вместо Pyro4.core.Proxy и Pyro4.core.Daemon()   -  person Matthew Moisen    schedule 01.12.2015


Ответы (1)


Вы не можете просто распаковать замаринованный объект в своем клиентском коде. Как и во всех случаях выбора, только состояние объекта обрабатывается и передается по сети. Чтобы распаковать его, ваш код должен иметь доступ к тому же классу в том же модуле, откуда был получен объект на стороне сервера. т.е. вам придется дублировать модуль, в котором ваш объект Player определен как на клиенте, так и на сервере.

Однако я думаю, что вы действительно хотите добиться чего-то другого: кажется, вы хотите создать наблюдающего игрока на своем сервере и взаимодействовать с ним из своего клиентского кода. Это невозможно сделать так, как вы пытаетесь здесь: объект в вашем клиенте будет копией и не будет зависеть от того, который вы замариновали на своем сервере. Вам придется вернуть прокси вместо фактического объекта (или его фрагмента). Но я предлагаю вам изучить механизм autoproxy Pyro4. См. https://pythonhosted.org/Pyro4/servercode.html#autoproxying, а также см. пример autoproxy, поставляемый с Pyro4.

person Irmen de Jong    schedule 11.12.2015
comment
Спасибо, чувак, думаю, я решил это, создав новый прокси-объект. Так что да, вы правы. - person Aygül Salahlı; 12.12.2015