Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SimpleXMLRPCServer返回值_Python_Numpy_Return Value_Simplexmlrpcserver - Fatal编程技术网

Python SimpleXMLRPCServer返回值

Python SimpleXMLRPCServer返回值,python,numpy,return-value,simplexmlrpcserver,Python,Numpy,Return Value,Simplexmlrpcserver,我刚开始使用XMLRPC服务器和客户端将raspberry pi连接到计算机 我的服务器如下所示: from SimpleXMLRPCServer import SimpleXMLRPCServer from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler import numpy as np allow_reuse_address = True ip = '...' port = 8000 class RequestHan

我刚开始使用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"
我的客户看起来像这样:

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()总是抛出一个异常。我发现,如果我的返回值是浮点而不是numpy数组,它可以正常工作:

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

我不知道出了什么问题,但我认为应该可以返回numpy数组。您知道如何解决这个问题吗?

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())
        ...

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())
        ...

这是一个非常简单的解决方法!转换为列表并返回numpy阵列需要一些时间,但不到500毫秒。感谢您的快速帮助。这是一个非常简单的解决方法!转换为列表并返回numpy阵列需要一些时间,但不到500毫秒。感谢您的快速帮助。