2016-04-30 7 views
4

У меня есть следующее определение класса в файле ру:Pyro4 с обратными вызовами

class this_obj(object): 

    def __init__(self): 
     self._apple = 5.0 
     self.observ_apple = [] 

    def setter(self, value): 
     if (self._apple != value): 
      self._apple = value 
      for callback in self.observ_apple: 
       callback(self._apple) 

    def getter(self): 
     return self._apple 

    # apply property 
    apple = property(getter, setter) 

    # binder functions 
    def bind_to_apple(self, callback): 
     self.observ_apple.append(callback) 

И у меня есть этот основной код в другом файле:

import handler_obj 

def print_on_change(value): 
    print("apple change!!! " + str(value)) 

if __name__ == "__main__": 
    q = handler_obj.this_obj() 
    q.bind_to_apple(print_on_change) 
    print(q.getter()) 
    q.setter(30) 
    print(q.getter()) 

Если запустить этот код вы можете увидеть, что он работает. Теперь я пытаюсь запустить тот же код с Pyro4. Как я это делал, я всегда работать в следующее сообщение об ошибке:

Pyro4.errors.SerializeError: unsupported serialized class: builtins.function 

в следующей строке:

q.bind_to_apple(print_on_change) 

Мой вопрос будет: Это возможно даже с Pyro4 или это ограничение сериализатора? Можно ли это решить, если я попытаюсь использовать рассол вместо змеи?

Если нет, то есть альтернатива Pyro4, которую вы можете мне предложить для таких случаев?

Заранее спасибо.

ответ

1

Я только что нашел решение для этого. Если вы измените сериализатор в config.py, чтобы укусить, функция обработки будет также обработана.

+0

Не редактируйте сам файл configuration.py, так как он является частью библиотеки! Используйте другой способ изменения элемента конфигурации (например, с помощью соответствующей переменной среды) –

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