Python SimpleXMLRPCServer return 值
Python SimpleXMLRPCServer return value
我刚开始使用 XMLRPC 服务器和客户端将我的 raspberry pi 连接到计算机。
我的服务器是这样的:
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
import numpy as np
allow_reuse_address = True
ip = '...'
port = 8000
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
server = SimpleXMLRPCServer((ip, port), requestHandler=RequestHandler)
server.register_introspection_functions()
def Spectrum():
data = ... # it's a numpy array
return data
server.register_function(Spectrum, 'Spectrum')
server.serve_forever()
我的客户是这样的:
#!/usr/bin/env python
import xmlrpclib
import numpy as np
[...]
def getSpectrum():
try:
s = xmlrpclib.ServerProxy(server)
v = s.Spectrum()
print v
except:
print "no data"
我的服务器是 运行,我的测试函数显示它可以工作。但是我的函数 getSpectrum() 总是抛出异常。我发现如果我的 return 值是浮点数而不是 numpy 数组,它工作正常:
def Spectrum():
data = ... # it's a numpy array
return float(data[0][0])
我不知道哪里出了问题,但我认为应该可以 return 一个 numpy 数组。你知道怎么解决吗?
xmlrpclib 仅支持标准 python 类型的编组。 numpy 数组是一种扩展类型,因此不能开箱即用地序列化。一个简单的解决方案是 return numpy 数组的列表表示,当您收到数据时,您再次将其转换为 numpy 数组:
def Spectrum():
data = ... # it's a numpy array
return data.tolist()
...
def getSpectrum():
try:
s = xmlrpclib.ServerProxy(server)
v = numpy.asarray(s.Spectrum())
...
我刚开始使用 XMLRPC 服务器和客户端将我的 raspberry pi 连接到计算机。
我的服务器是这样的:
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
import numpy as np
allow_reuse_address = True
ip = '...'
port = 8000
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
server = SimpleXMLRPCServer((ip, port), requestHandler=RequestHandler)
server.register_introspection_functions()
def Spectrum():
data = ... # it's a numpy array
return data
server.register_function(Spectrum, 'Spectrum')
server.serve_forever()
我的客户是这样的:
#!/usr/bin/env python
import xmlrpclib
import numpy as np
[...]
def getSpectrum():
try:
s = xmlrpclib.ServerProxy(server)
v = s.Spectrum()
print v
except:
print "no data"
我的服务器是 运行,我的测试函数显示它可以工作。但是我的函数 getSpectrum() 总是抛出异常。我发现如果我的 return 值是浮点数而不是 numpy 数组,它工作正常:
def Spectrum():
data = ... # it's a numpy array
return float(data[0][0])
我不知道哪里出了问题,但我认为应该可以 return 一个 numpy 数组。你知道怎么解决吗?
xmlrpclib 仅支持标准 python 类型的编组。 numpy 数组是一种扩展类型,因此不能开箱即用地序列化。一个简单的解决方案是 return numpy 数组的列表表示,当您收到数据时,您再次将其转换为 numpy 数组:
def Spectrum():
data = ... # it's a numpy array
return data.tolist()
...
def getSpectrum():
try:
s = xmlrpclib.ServerProxy(server)
v = numpy.asarray(s.Spectrum())
...