Python SimpleXMLRPCServer返回值

2024-04-30 02:40:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用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()

我的客户看起来像这样:

^{pr2}$

我的服务器正在运行,我的测试功能表明它可以工作。但是我的函数getSpectrum()总是抛出一个异常。我发现如果我的返回值是一个float而不是numpy数组,它可以正常工作:

def Spectrum():
    data = ... # it's a numpy array
    return float(data[0][0])

我不知道怎么回事,但我认为应该可以返回一个numpy数组。你知道怎么修吗?在


Tags: fromimportipnumpy服务器registerdataserver
1条回答
网友
1楼 · 发布于 2024-04-30 02:40:21

xmlrpclib只支持标准python类型的编组。numpy数组是扩展类型,因此不能开箱即用序列化。一个简单的解决方案是返回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())
        ...

相关问题 更多 >