[英]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.