diff options
Diffstat (limited to 'examples/monitoring/simple_monitor.py')
-rw-r--r-- | examples/monitoring/simple_monitor.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/examples/monitoring/simple_monitor.py b/examples/monitoring/simple_monitor.py new file mode 100644 index 0000000..88cdd4c --- /dev/null +++ b/examples/monitoring/simple_monitor.py @@ -0,0 +1,90 @@ +# -*- coding: utf-8 -*- +"""Simple example demonstrating the use of the socket monitoring feature.""" + +# This file is part of pyzmq. +# +# Distributed under the terms of the New BSD License. The full +# license is in the file COPYING.BSD, distributed as part of this +# software. +from __future__ import print_function + +__author__ = 'Guido Goldstein' + +import json +import os +import struct +import sys +import threading +import time + +import zmq +from zmq.utils.monitor import recv_monitor_message + +line = lambda : print('-' * 40) + +def logger(monitor): + done = False + while monitor.poll(timeout=5000): + evt = recv_monitor_message(monitor) + print(json.dumps(evt, indent=1)) + if evt['event'] == zmq.EVENT_MONITOR_STOPPED: + break + print() + print("Logger done!") + monitor.close() + +print("libzmq-%s" % zmq.zmq_version()) +if zmq.zmq_version_info() < (4,0): + raise RuntimeError("monitoring in libzmq version < 4.0 is not supported") + +print("Event names:") +for name in dir(zmq): + if name.startswith('EVENT_'): + print("%21s : %4i" % (name, getattr(zmq, name))) + + +ctx = zmq.Context().instance() +rep = ctx.socket(zmq.REP) +req = ctx.socket(zmq.REQ) + +monitor = req.get_monitor_socket() + +t = threading.Thread(target=logger, args=(monitor,)) +t.start() + +line() +print("bind req") +req.bind("tcp://127.0.0.1:6666") +req.bind("tcp://127.0.0.1:6667") +time.sleep(1) + +line() +print("connect rep") +rep.connect("tcp://127.0.0.1:6667") +time.sleep(0.2) +rep.connect("tcp://127.0.0.1:6666") +time.sleep(1) + +line() +print("disconnect rep") +rep.disconnect("tcp://127.0.0.1:6667") +time.sleep(1) +rep.disconnect("tcp://127.0.0.1:6666") +time.sleep(1) + +line() +print("close rep") +rep.close() +time.sleep(1) + +line() +print("close req") +req.close() +time.sleep(1) + +line() +print("joining") +t.join() + +print("END") +ctx.term() |