summaryrefslogtreecommitdiff
path: root/examples/monitoring/simple_monitor.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/monitoring/simple_monitor.py')
-rw-r--r--examples/monitoring/simple_monitor.py90
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()