2016-04-30 40 views
4

我有一个PY文件下面的类定义: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

我刚刚找到了解决方案。如果你将configuration.py中的序列化程序更改为dill而不是函数,回调函数也会被处理。

+0

不要编辑configuration.py文件本身,因为它是库的一部分!使用另一种方式来更改配置项(例如通过使用适当的环境变量) –