Pyro4 pickle 序列化程序 numpy 数组

Pyro4 pickle serializer numpy array

尝试使用 Pyro4 序列化 numpy 数组时返回以下类型错误

TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate__

代码如下

import numpy as np
import Pyro4

# set pickle serializer
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent'])


@Pyro4.expose
class test(object):
    def get_array(self):
        return np.random.random((10,10))


def main():
    # create a Pyro daemon
    daemon = Pyro4.Daemon()    
    # register test instance
    uri = daemon.register(test())
    # print uri to connect to it in another console
    print uri
    # start the event loop of the server to wait for calls
    daemon.requestLoop()                   

if __name__=="__main__":
    main()

现在打开另一个控制台并尝试调用测试实例执行以下操作

import Pyro4
Pyro4.config.SERIALIZERS_ACCEPTED = set(['pickle','json', 'marshal', 'serpent'])
# connect to URI which is printed above
# must be something like this 'PYRO:obj_c261949088104b839878255b98a9da90@localhost:57495'
p = Pyro4.Proxy(URI)
p.get_array()


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 171, in __call__
    return self.__send(self.__name, args, kwargs)
  File "/usr/local/lib/python2.7/site-packages/Pyro4/core.py", line 438, in _pyroInvoke
    raise data
TypeError: don't know how to serialize class <type 'numpy.ndarray'>. Give it vars() or an appropriate __getstate

手册中提到了这一点,包括如何解决它:http://pythonhosted.org/Pyro4/tipstricks.html#pyro-and-numpy

在上面的代码中,您没有告诉客户端代码使用 pickle。您应该为此使用另一个配置项(SERIALIZER)。你那里的东西是为 Pyro deamons 准备的。