设置超时 ZMQ - 有条件
Set timeout ZMQ - with a condition
我正在开发客户端-服务器应用程序 - 有多个客户端。
一个过程创建工作并启动它们。服务器在 ZMQ 套接字上等待这些作业的答案。
问题:
目前我正在处理 6 个工作,我希望至少收到 4 个答案。收到 4 个答案后 - 我想再等 2 秒,如果没有得到更多结果 - 处理我得到的结果,然后 return 监听套接字。
我的想法:
我见过几种方法(轮询、ZMQ_CONNECT_TIMEOUT 等),但我想不出在我的案例中使用它的方法。
我想过4个作业做完再在服务器启动一个进程,休眠2秒再发SIGSTP,但怕影响服务器return监听在插座上。
有什么建议吗?
嗯,没有人回答,但我找到了适合我的解决方案。
发布可能对其他人有帮助。
我做的很简单:
while active_clients > 0:
# check if we already have MIN_REQ sites
if requirement:
try:
time.sleep(10) # give another chance to the last client
message = socket.recv_pyobj(flags=zmq.NOBLOCK) # peek to see if received a msg
results.append(message)
break
except zmq.Again as e:
break
else:
# Wait for next response from client
message = socket.recv_pyobj()
results.append(message)
active_clients -= 1
# Send reply back to client
socket.send_pyobj(b"ok")
注意 if else 模式
如果要求(可以是您想要的任何要求)得到满足 - 只需打开一个非阻塞套接字。
也可以去掉break
语句,再输入一个时间循环
我正在开发客户端-服务器应用程序 - 有多个客户端。 一个过程创建工作并启动它们。服务器在 ZMQ 套接字上等待这些作业的答案。
问题:
目前我正在处理 6 个工作,我希望至少收到 4 个答案。收到 4 个答案后 - 我想再等 2 秒,如果没有得到更多结果 - 处理我得到的结果,然后 return 监听套接字。
我的想法:
我见过几种方法(轮询、ZMQ_CONNECT_TIMEOUT 等),但我想不出在我的案例中使用它的方法。
我想过4个作业做完再在服务器启动一个进程,休眠2秒再发SIGSTP,但怕影响服务器return监听在插座上。
有什么建议吗?
嗯,没有人回答,但我找到了适合我的解决方案。
发布可能对其他人有帮助。
我做的很简单:
while active_clients > 0:
# check if we already have MIN_REQ sites
if requirement:
try:
time.sleep(10) # give another chance to the last client
message = socket.recv_pyobj(flags=zmq.NOBLOCK) # peek to see if received a msg
results.append(message)
break
except zmq.Again as e:
break
else:
# Wait for next response from client
message = socket.recv_pyobj()
results.append(message)
active_clients -= 1
# Send reply back to client
socket.send_pyobj(b"ok")
注意 if else 模式
如果要求(可以是您想要的任何要求)得到满足 - 只需打开一个非阻塞套接字。
也可以去掉break
语句,再输入一个时间循环