summaryrefslogtreecommitdiffstats
path: root/external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py
diff options
context:
space:
mode:
Diffstat (limited to 'external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py')
-rw-r--r--external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py b/external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py
new file mode 100644
index 00000000..b996ad8d
--- /dev/null
+++ b/external_libs/python/pyzmq-14.7.0/examples/pubsub/subscriber.py
@@ -0,0 +1,74 @@
+"""A test that subscribes to NumPy arrays.
+
+Uses REQ/REP (on PUB/SUB socket + 1) to synchronize
+"""
+
+#-----------------------------------------------------------------------------
+# Copyright (c) 2010 Brian Granger
+#
+# Distributed under the terms of the New BSD License. The full license is in
+# the file COPYING.BSD, distributed as part of this software.
+#-----------------------------------------------------------------------------
+
+
+import sys
+import time
+
+import zmq
+import numpy
+
+def sync(connect_to):
+ # use connect socket + 1
+ sync_with = ':'.join(connect_to.split(':')[:-1] +
+ [str(int(connect_to.split(':')[-1]) + 1)]
+ )
+ ctx = zmq.Context.instance()
+ s = ctx.socket(zmq.REQ)
+ s.connect(sync_with)
+ s.send('READY')
+ s.recv()
+
+def main():
+ if len (sys.argv) != 3:
+ print 'usage: subscriber <connect_to> <array-count>'
+ sys.exit (1)
+
+ try:
+ connect_to = sys.argv[1]
+ array_count = int (sys.argv[2])
+ except (ValueError, OverflowError), e:
+ print 'array-count must be integers'
+ sys.exit (1)
+
+ ctx = zmq.Context()
+ s = ctx.socket(zmq.SUB)
+ s.connect(connect_to)
+ s.setsockopt(zmq.SUBSCRIBE,'')
+
+ sync(connect_to)
+
+ start = time.clock()
+
+ print "Receiving arrays..."
+ for i in range(array_count):
+ a = s.recv_pyobj()
+ print " Done."
+
+ end = time.clock()
+
+ elapsed = (end - start) * 1000000
+ if elapsed == 0:
+ elapsed = 1
+ throughput = (1000000.0 * float (array_count)) / float (elapsed)
+ message_size = a.nbytes
+ megabits = float (throughput * message_size * 8) / 1000000
+
+ print "message size: %.0f [B]" % (message_size, )
+ print "array count: %.0f" % (array_count, )
+ print "mean throughput: %.0f [msg/s]" % (throughput, )
+ print "mean throughput: %.3f [Mb/s]" % (megabits, )
+
+ time.sleep(1.0)
+
+if __name__ == "__main__":
+ main()