Pyro4回调函数

4

我在一个py文件中有以下的类定义:

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是否可能实现这一点,还是这是序列化器的限制?如果我尝试使用pickle而不是serpent,是否可以解决这个问题?
如果不行,你能为我推荐在这种情况下可以使用的Pyro4替代方案吗?
提前致谢。
1个回答

2
我刚找到了一个解决方案。如果你将 Pyro4.config.SERIALIZER 全局变量的序列化器设置为 "dill",那么函数回调也会被处理。

不要直接编辑configuration.py文件,因为它是库的一部分!使用其他方式来更改配置项(例如通过使用适当的环境变量)。 - Irmen de Jong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接