簡體   English   中英

Python SimpleXMLRPCServer返回值

[英]Python SimpleXMLRPCServer return value

我剛開始使用XMLRPC服務器和客戶端將樹莓派連接到計算機。

我的服務器如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM