【问题标题】:Set timeout ZMQ - with a condition设置超时 ZMQ - 有条件
【发布时间】:2022-01-17 14:04:33
【问题描述】:

我正在开发一个客户端-服务器应用程序 - 有几个客户端。 一个进程创建工作并启动它们。服务器在 ZMQ 套接字上等待这些作业的答案。

问题:

目前我正在处理 6 个工作,我想从至少 4 个工作中获得答案。收到 4 个答案后 - 我想再等 2 秒,如果没有得到更多结果 - 处理我的结果得到,然后返回监听socket。

我的想法:

我见过几种方法(轮询、ZMQ_CONNECT_TIMEOUT 等),但我想不出在我的情况下使用它的方法。

我想过在服务器完成4个作业后启动另一个进程,它进入睡眠2秒然后发送一个SIGSTP,但我担心它会影响服务器返回监听套接字。

有什么建议吗?

【问题讨论】:

    标签: zeromq pyzmq


    【解决方案1】:

    好吧,没有人回答,但我找到了适合我的解决方案。

    发布因为它可能对其他人有所帮助。

    我所做的就是这么简单:

     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 语句,并输入另一个循环时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2011-11-08
      • 2018-11-26
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多