2015-11-23 3 views
1

Im пытается отправить объект с Pyro4. Похоже, это меняет на пути, как Im использованием pickle.dumps и Pickle.loads на сервере он работает, но когда я пытаюсь использовать pickle.loads на клиенте это дает мне KeyError.Server:KeyError with Pyro4

def get_objects(self,player): 
    "Notify player about new game state." 
    data = self.player_serialize_gmf(player) 
    tst = pickle.dumps("objects %s" % data) 
    zzd = pickle.loads(tst) 
    return tst 

И клиент призывающую часть :

data = pickle.loads(self.game.get_objects(self.player)) 

И ошибка

File "/Library/Python/2.7/site-packages/Pyro4-4.40-py2.7.egg/Pyro4/core.py", line 426, in _pyroInvoke 
    raise data 
KeyError: {u'state': (u'PYRONAME:player.server',(), 
        (u'setLast_ts', u'join', u'setName', u'getNextMove', 
         u'getPoints', u'getName', u'setNextMove', u'isSpectator', 
         u'getGj', u'setChar', u'getUuid', u'setPoints', u'setGj', 
         u'getLast_ts', u'getChar'),(), 0.0, None, u'hello', 0), 
         u'__class__': u'Pyro4.core.Proxy'} 
+0

Почему вы используете pickle для сериализации вместо стандартного, Serpent? –

+0

Он по-прежнему работает с Serpent, если данные сериализуемы. Я просто все пробовал. –

ответ

0

проблема была в стороне сервера get_objects (метод). Я использовал примитивные и типы объектов в одном массиве. По-видимому, они не могут находиться в одном массиве.

Надеюсь, это поможет.

Смежные вопросы