如果ZeroMQ没有收到消息,如何采取行动?

时间:2013-03-21 14:05:03

标签: python zeromq

我有一些分布式控制系统,我每秒钟发送一次心跳。在接收端,如果没有收到超过2秒的消息,我需要采取措施。问题是,当zeroMQ正在等待答案时,我无法做任何其他事情,例如检查自收到最后一条消息以来已经过了多少时间。

我现在的代码如下。如果没有收到超过2秒的消息,有人知道如何采取行动吗?欢迎所有提示!

[编辑]在Pieter Hintjes的提示下,我在代码中添加了轮询,但我仍然无法正常工作。还有其他想法吗?

from datetime import datetime
import zmq
context = zmq.Context()

# Set up subscriber connection to receive message from broker
subscriber = context.socket(zmq.SUB)
subscriber.connect('tcp://localhost:8888')
subscriber.setsockopt(zmq.SUBSCRIBE, 'beat')

# Initialise poll set
poller = zmq.Poller()
poller.register(subscriber, zmq.POLLIN)

while True:
    socks = dict(poller.poll(2000))
    if subscriber in socks and socks[subscriber] == zmq.POLLIN:
        message = subscriber.recv()
        print(message)

    print('do other stuff')

1 个答案:

答案 0 :(得分:2)

在ZMQ套接字上使用poll而不是阻塞recv。 ZeroMQ指南中有很多这方面的例子。