2017-06-07 42 views
0

我需要通过websocket(两端的Python API)发送一个包含多个大熊猫数据框的pickled python字典。为了提高性能,我想在通过websocket发送它之前压缩腌制对象。但是,在执行此操作时,收到的消息始终为“无”。通过gevent websocket发送二进制数据

客户:

df = pd.DataFrame({'a':[1,2,3,4]}) 
d = dict(b=df) 
msg = zlib.compress(pickle.dumps(d),5) 
socket.send(msg) 

服务器:

msg = socket.receive() 
# msg is always None when called with client code above. 
data = pickle.loads(zlib.decompress(msg)) 

有没有更好的方式来做到这一点? 我通过Flask-Sockets框架使用gevent-websocket。

回答

0

在Python 2.7发送二进制数据,必须设置binary=True在客户端(ws4py):

socket.send(msg, Binary=True) 

至于另注,在接收端,你将需要之前来包装味精在缓冲区发送到zlib.decompress()

msg = socket.receive() 
data = pickle.loads(zlib.decompress(buffer(msg))) 
相关问题