gpt4 book ai didi

python - 向服务器 pyzmq 发送数据时出现问题

转载 作者:行者123 更新时间:2023-12-03 11:58:41 25 4
gpt4 key购买 nike

我有以下代码使用请求和回复模式从服务器发送数组到客户端,

def send_array( socket, A, flags = 0, copy = True, track = False ):
"""send a numpy array with metadata"""
md = dict( dtype = str( A.dtype ),
shape = A.shape,)
socket.send_json( md, flags | zmq.SNDMORE )
return socket.send(A, flags, copy = copy, track = track )

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5667")
videoFile = "C:/Users/Downloads/test.mp4"
camera = cv2.VideoCapture(videoFile)
while True:
grabbed, frame = camera.read()
try:
frame = cv2.resize( frame, (224, 224) ).astype( "float32" )
except cv2.error:
break
image= img_to_array(frame)
image=image.reshape((1,image.shape[0],image.shape[1],image.shape[2]))
image=preprocess_input(image)
preds=model.predict(image)
send_array(socket, preds)
socket.close()

def recv_array( socket, flags = 0, copy = True, track = False ):
md = socket.recv_json( flags = flags )
msg = socket.recv(flags = flags, copy = copy, track = track )
#buf = buffer( msg )
#pass;
#img = np.frombuffer(bytes(memoryview(msg)), dtype=md['dtype'])
A = numpy.frombuffer( bytes(memoryview(msg)), dtype = md['dtype'] )
return A.reshape(md['shape'])

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5667")
time.sleep(0.2)

while True:
frame = recv_array(socket)
print(frame)
socket.close()
我没有检索任何错误,但没有数据从客户端发送到服务器。谢谢,非常感谢您的帮助。

最佳答案

欢迎来到 art 的土地零之禅。
使用 ZeroMQ REQ/REP Scalable Formal Communication Pattern Archetype,必须满足其记录的属性,否则工作无法完成。
非常 REQ/REP Archetype 被记录为使用和遵循状态完整的分布式有限状态自动机 ( dFSA ),其中 REQ .send() -问,下一个 REP .recv() -s 并且必须 REP .send() -answer,必须是 REQ .recv() -ed,在任何 REQ 可以进行任何下一个 .send() 之前并且这个 dFSA 循环会无限重复(或直到出现无法挽救的相互死锁 - 更多详细信息请参见 thisthis)。
因此,您的代码永远不会忽略保持 REQ 端的两步舞: .send()-.recv()-.send()-.recv()-...
和,
对称的
代表方 .recv()-.send()-.recv()-.send()-...
不这样做将挂起所述 dFSA 的状态完整转换流程,并且代码将返回 EFSM -来自任何此类调用的错误状态 { .recv() | .send() } -方法,它与压缩在所述 dFSA 内的 REQ/REP 常规序列不对齐。
最后但并非最不重要的一点是,您的代码原样在从不测试返回值时很弱且容易崩溃,因此没有对警告的自适应处理,例如直到最后才读取多部分消息(或缺少下一个,只是假设并盲目相信,多部分消息部分)。这将以类似但同样痛苦的方式使代码崩溃。
远比本地的纯[SERIAL] 复杂得多。 - 一种代码。

关于python - 向服务器 pyzmq 发送数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64833795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com