diff options
Diffstat (limited to 'examples/eventloop')
-rw-r--r-- | examples/eventloop/asyncweb.py | 96 | ||||
-rw-r--r-- | examples/eventloop/echo.py | 27 | ||||
-rw-r--r-- | examples/eventloop/echostream.py | 24 | ||||
-rw-r--r-- | examples/eventloop/web.py | 46 |
4 files changed, 0 insertions, 193 deletions
diff --git a/examples/eventloop/asyncweb.py b/examples/eventloop/asyncweb.py deleted file mode 100644 index 06b03f3..0000000 --- a/examples/eventloop/asyncweb.py +++ /dev/null @@ -1,96 +0,0 @@ -"""Async web request example with tornado. - -Requests to localhost:8888 will be relayed via 0MQ to a slow responder, -who will take 1-5 seconds to respond. The tornado app will remain responsive -duriung this time, and when the worker replies, the web request will finish. - -A '.' is printed every 100ms to demonstrate that the zmq request is not blocking -the event loop. -""" - - -import sys -import random -import threading -import time - -import zmq -from zmq.eventloop import ioloop, zmqstream - -""" -ioloop.install() must be called prior to instantiating *any* tornado objects, -and ideally before importing anything from tornado, just to be safe. - -install() sets the singleton instance of tornado.ioloop.IOLoop with zmq's -IOLoop. If this is not done properly, multiple IOLoop instances may be -created, which will have the effect of some subset of handlers never being -called, because only one loop will be running. -""" - -ioloop.install() - -import tornado -from tornado import web - - -def slow_responder(): - """thread for slowly responding to replies.""" - ctx = zmq.Context.instance() - socket = ctx.socket(zmq.REP) - socket.linger = 0 - socket.bind('tcp://127.0.0.1:5555') - i=0 - while True: - msg = socket.recv() - print "\nworker received %r\n" % msg - time.sleep(random.randint(1,5)) - socket.send(msg + " to you too, #%i" % i) - i+=1 - -def dot(): - """callback for showing that IOLoop is still responsive while we wait""" - sys.stdout.write('.') - sys.stdout.flush() - -def printer(msg): - print (msg) - -class TestHandler(web.RequestHandler): - - @web.asynchronous - def get(self): - ctx = zmq.Context.instance() - s = ctx.socket(zmq.REQ) - s.connect('tcp://127.0.0.1:5555') - # send request to worker - s.send('hello') - loop = ioloop.IOLoop.instance() - self.stream = zmqstream.ZMQStream(s) - self.stream.on_recv(self.handle_reply) - - def handle_reply(self, msg): - # finish web request with worker's reply - reply = msg[0] - print "\nfinishing with %r\n" % reply, - self.stream.close() - self.write(reply) - self.finish() - -def main(): - worker = threading.Thread(target=slow_responder) - worker.daemon=True - worker.start() - - application = web.Application([(r"/", TestHandler)]) - beat = ioloop.PeriodicCallback(dot, 100) - beat.start() - application.listen(8888) - try: - ioloop.IOLoop.instance().start() - except KeyboardInterrupt: - print ' Interrupted' - - -if __name__ == "__main__": - main() - diff --git a/examples/eventloop/echo.py b/examples/eventloop/echo.py deleted file mode 100644 index 9be079b..0000000 --- a/examples/eventloop/echo.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -"""A trivial ZMQ echo server using the eventloop. - -Authors -------- -* MinRK -""" - -import zmq -from zmq.eventloop import ioloop - -loop = ioloop.IOLoop.instance() - -ctx = zmq.Context() -s = ctx.socket(zmq.REP) -s.bind('tcp://127.0.0.1:5555') - -def rep_handler(sock, events): - # We don't know how many recv's we can do? - msg = sock.recv() - # No guarantee that we can do the send. We need a way of putting the - # send in the event loop. - sock.send(msg) - -loop.add_handler(s, rep_handler, zmq.POLLIN) - -loop.start()
\ No newline at end of file diff --git a/examples/eventloop/echostream.py b/examples/eventloop/echostream.py deleted file mode 100644 index 04c1532..0000000 --- a/examples/eventloop/echostream.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python -"""Adapted echo.py to put the send in the event loop using a ZMQStream. - -Authors -------- -* MinRK -""" - -import zmq -from zmq.eventloop import ioloop, zmqstream -loop = ioloop.IOLoop.instance() - -ctx = zmq.Context() -s = ctx.socket(zmq.REP) -s.bind('tcp://127.0.0.1:5555') -stream = zmqstream.ZMQStream(s, loop) - -def echo(msg): - print " ".join(msg) - stream.send_multipart(msg) - -stream.on_recv(echo) - -loop.start()
\ No newline at end of file diff --git a/examples/eventloop/web.py b/examples/eventloop/web.py deleted file mode 100644 index 1285f95..0000000 --- a/examples/eventloop/web.py +++ /dev/null @@ -1,46 +0,0 @@ -import zmq -from zmq.eventloop import ioloop, zmqstream - -""" -ioloop.install() must be called prior to instantiating *any* tornado objects, -and ideally before importing anything from tornado, just to be safe. - -install() sets the singleton instance of tornado.ioloop.IOLoop with zmq's -IOLoop. If this is not done properly, multiple IOLoop instances may be -created, which will have the effect of some subset of handlers never being -called, because only one loop will be running. -""" - -ioloop.install() - -import tornado -import tornado.web - - -""" -this application can be used with echostream.py, start echostream.py, -start web.py, then every time you hit http://localhost:8888/, -echostream.py will print out 'hello' -""" - -def printer(msg): - print (msg) - -ctx = zmq.Context() -s = ctx.socket(zmq.REQ) -s.connect('tcp://127.0.0.1:5555') -stream = zmqstream.ZMQStream(s) -stream.on_recv(printer) - -class TestHandler(tornado.web.RequestHandler): - def get(self): - print ("sending hello") - stream.send("hello") - self.write("hello") -application = tornado.web.Application([(r"/", TestHandler)]) - -if __name__ == "__main__": - application.listen(8888) - ioloop.IOLoop.instance().start() - - |