2013-03-21 91 views
2

我有一种分布式控制系统,我每秒钟都会发出心跳。在接收端,如果超过2秒未收到任何消息,我需要采取措施。问题是,当zeroMQ正在等待答案时,我无法做任何其他事情,比如检查自收到最后一条消息以来经过了多少时间。如果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') 

回答

2

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

+1

Pieter Hintjes - Dankje!我认为你是对的,我需要使用轮询。问题是我还不知道如何设置一个动作,如果它没有收到数据两秒钟。我在最初的帖子中更新了代码,现在我已经尝试了。你可能有任何其他小费或暗示(je)? – kramer65 2013-03-21 15:04:48