【发布时间】:2020-09-22 06:20:05
【问题描述】:
我已参考相关查询,无法修复上述错误。我正在两个单独的进程之间运行服务器和客户端 python 对象共享。客户端需要将字典或元组发送到服务器。 我尝试将协议更改为 pickle.DEFAULT_PROTOCOL 和 pickle.HIGHEST_PROTOCOL。问题仍然没有解决...但是 out 可以打印我发送的字典。
服务器代码:
import zmq
import socket
import sys
import datetime
import pickle
def errorhandling(name: str, msg: str) -> None:
"""
To handle Error in the API and Strategies, if you call this
"""
try:
print(f" {datetime.datetime.now().time()}| ERROR |{name} | {msg} | {sys.exc_info()[0]} -"
f" {sys.exc_info()[1]} | Line No:{sys.exc_info()[2].tb_lineno}")
except Exception as e:
print("error", f" {name} | ErrorHandlingError - {e}")
ip = socket.gethostbyname(socket.gethostname())
ordcontext = zmq.Context()
ordsocket = ordcontext.socket(zmq.XREP)
ordsocket.bind(f"tcp://{ip}:7712")
def ordersocket():
print("Order socket Running")
while True:
try:
#orddata = self.ordsocket.recv().decode('utf-8', 'ignore')
orddata = ordsocket.recv_pyobj()
#orddata2 = pickle.loads(orddata)
print(orddata)
except Exception:
errorhandling(name="ordername",
msg="ordersocket")
print("Order socket NOT Running")
ordersocket()
客户代码:
import zmq
import time
import socket
import pickle
ip = socket.gethostbyname(socket.gethostname())
orcontext = zmq.Context()
orsocket = orcontext.socket(zmq.XREQ)
orsocket.connect(f"tcp://{ip}:7712")
def sendorder():
while True:
data = {"A": "Nameofstg", "LTP": 1200, "QTY":200, "SS":"Now", "PP":230}
orsocket.send_pyobj(obj=data,protocol=pickle.HIGHEST_PROTOCOL)
time.sleep(3)
sendorder()
错误(带有打印语句):
<class '_pickle.UnpicklingError'> - invalid load key, '\x00'.
11:34:49.665037|错误 |订单名称 |订单套接字 |
【问题讨论】:
-
有人可以回复查询吗...帮帮我