设置超时 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语句,再输入一个时间循环