zeroMQ中,zmq.Poller() ,in python 中的用法

当你需要在同一个线程中的不同套接字上侦听时,使用poller:

 

 

ZMQ.Socket subscriber = ctx.socket(ZMQ.SUB)
ZMQ.Socket puller = ctx.socket(ZMQ.PULL)

使用轮询器注册套接字(POLLIN侦听传入的消息)

 

ZMQ.Poller poller = ZMQ.Poller(2)
poller.register(subscriber, ZMQ.Poller.POLLIN)
poller.register(puller, ZMQ.Poller.POLLIN)

当轮询时,使用循环:

 

while( notInterrupted()){
  poller.poll()

  //subscriber registered at index '0'
  if( poller.pollin(0)) 
     subscriber.recv(ZMQ.DONTWAIT)

  //puller registered at index '1'
  if( poller.pollin(1))
     puller.recv( ZMQ.DONTWAIT)
}

选择您要轮询的方式…

poller.poll()阻塞,直到有任何套接字上的数据。
poller.poll(1000)块为1,然后超时。

轮询器在套接字上有可用的数据(消息)时通知;它是你的工作,阅读它。

读取时,不要阻塞:socket.recv(ZMQ.DONTWAIT)。即使poller.pollin(0)检查是否有要读取的数据,你想避免在轮询循环内的任何阻塞调用,否则,你可能最终阻塞poller由于“卡住”套接字。

因此,如果两个单独的消息发送到订阅者,您必须调用subscriber.recv()两次以清除轮询器,否则,如果您调用subscriber.recv()一次,轮询器将继续告诉您有另一个消息读取。因此,本质上,轮询器跟踪消息的可用性和数量,而不是实际消息。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值