zmq poller用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

zmq poller用法
ZMQ(ZeroMQ)是一款高性能的消息队列中间件,而zmq poller 是它的一个重要组件。

poller可以同时监控多个socket,当有数据可读或可写时,会自动通知相应的socket进行处理。

这种机制避免了不必要的循环轮询,提高了系统的性能。

下面是zmq poller的用法指南:
1. 创建一个poller对象
创建一个poller对象需要用到zmq.poll()函数。

这个函数会返回一个poller对象,可以用来监控多个socket。

```python
import zmq
poller = zmq.Poller()
```
2. 注册socket到poller中
将需要监控的socket注册到poller中,可以使用poller对象的register()方法。

这个方法有两个参数,第一个是socket对象,第二个是事件类型(zmq.POLLIN或zmq.POLLOUT)。

```python
socket1 = context.socket(zmq.REP)
socket1.bind('tcp://*:5555')
poller.register(socket1, zmq.POLLIN)
socket2 = context.socket(zmq.REQ)
socket2.connect('tcp://localhost:5556')
poller.register(socket2, zmq.POLLOUT)
```
3. 轮询监控socket
使用poller对象的poll()方法可以轮询监控所有注册的socket。

这个方法有一个参数timeout,表示轮询的超时时间(单位毫秒)。

如果timeout为0,表示轮询一次就返回。

```python
while True:
socks = dict(poller.poll(1000))
if socket1 in socks and socks[socket1] == zmq.POLLIN:
print('received message from socket1')
message = socket1.recv()
socket1.send(b'ack')
if socket2 in socks and socks[socket2] == zmq.POLLOUT:
print('sending message to socket2')
socket2.send(b'hello')
message = socket2.recv()
```
4. 取消socket的注册
如果不需要监控某个socket了,可以使用poller对象的unregister()方法将其从poller中注销。

```python
poller.unregister(socket1)
```
总结:zmq poller是ZMQ强大的消息队列中间件的一个重要组件。

使用poller可以同时监控多个socket,避免了循环轮询,提高了系统的性能。

使用poller的步骤包括创建poller对象、注册socket 到poller中、轮询监控socket以及取消socket的注册。

相关文档
最新文档