我有某种分布式控制系统,我每秒都会发送一次心跳。在接收端,如果超过 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')