diff options
Diffstat (limited to 'examples/pubsub/publisher.py')
-rw-r--r-- | examples/pubsub/publisher.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/pubsub/publisher.py b/examples/pubsub/publisher.py new file mode 100644 index 0000000..a2ce6c9 --- /dev/null +++ b/examples/pubsub/publisher.py @@ -0,0 +1,57 @@ +"""A test that publishes 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(bind_to): + # use bind socket + 1 + sync_with = ':'.join(bind_to.split(':')[:-1] + + [str(int(bind_to.split(':')[-1]) + 1)]) + ctx = zmq.Context.instance() + s = ctx.socket(zmq.REP) + s.bind(sync_with) + print "Waiting for subscriber to connect..." + s.recv() + print " Done." + s.send('GO') + +def main(): + if len (sys.argv) != 4: + print 'usage: publisher <bind-to> <array-size> <array-count>' + sys.exit (1) + + try: + bind_to = sys.argv[1] + array_size = int(sys.argv[2]) + array_count = int (sys.argv[3]) + except (ValueError, OverflowError), e: + print 'array-size and array-count must be integers' + sys.exit (1) + + ctx = zmq.Context() + s = ctx.socket(zmq.PUB) + s.bind(bind_to) + + sync(bind_to) + + print "Sending arrays..." + for i in range(array_count): + a = numpy.random.rand(array_size, array_size) + s.send_pyobj(a) + print " Done." + +if __name__ == "__main__": + main() |