2015-06-29 4 views
1

Я только начал использовать сервер XMLRPC и клиентов для подключения моего малинового pi к компьютеру.Значение возвращаемого значения Python SimpleXMLRPCServer

Мой сервер выглядит следующим образом:

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 массива. Вы знаете, как это исправить?

ответ

0

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

Ну, это очень простой рабочий стол! Требуется немного времени для преобразования в список и обратно в массив numpy, но он меньше 500 мс. Спасибо, что помогли быстро. – schlenzmeister