diff --git a/docs/queues.rst b/docs/queues.rst index 806d05c6..5c8716eb 100644 --- a/docs/queues.rst +++ b/docs/queues.rst @@ -18,94 +18,16 @@ .. autoclass:: Queue :members: - .. testcode:: - - q = queues.Queue(maxsize=2) - - @gen.coroutine - def consumer(): - while True: - item = yield q.get() - try: - print('Doing work on %s' % item) - yield gen.sleep(0.01) - finally: - q.task_done() - - @gen.coroutine - def producer(): - for item in range(5): - yield q.put(item) - print('Put %s' % item) - - @gen.coroutine - def main(): - consumer() # Start consumer. - yield producer() # Wait for producer to put all tasks. - yield q.join() # Wait for consumer to finish all tasks. - print('Done') - - io_loop.run_sync(main) - - .. testoutput:: - - Put 0 - Put 1 - Put 2 - Doing work on 0 - Doing work on 1 - Put 3 - Doing work on 2 - Put 4 - Doing work on 3 - Doing work on 4 - Done - - PriorityQueue ^^^^^^^^^^^^^ .. autoclass:: PriorityQueue :members: - .. testcode:: - - q = queues.PriorityQueue() - q.put((1, 'medium-priority item')) - q.put((0, 'high-priority item')) - q.put((10, 'low-priority item')) - - print(q.get_nowait()) - print(q.get_nowait()) - print(q.get_nowait()) - - .. testoutput:: - - (0, 'high-priority item') - (1, 'medium-priority item') - (10, 'low-priority item') - LifoQueue ^^^^^^^^^ .. autoclass:: LifoQueue :members: - .. testcode:: - - q = queues.LifoQueue() - q.put(3) - q.put(2) - q.put(1) - - print(q.get_nowait()) - print(q.get_nowait()) - print(q.get_nowait()) - - .. testoutput:: - - 1 - 2 - 3 - Exceptions ---------- diff --git a/tornado/queues.py b/tornado/queues.py index 128c415c..55ab4834 100644 --- a/tornado/queues.py +++ b/tornado/queues.py @@ -48,6 +48,49 @@ class Queue(object): """Coordinate producer and consumer coroutines. If maxsize is 0 (the default) the queue size is unbounded. + + .. testcode:: + + q = queues.Queue(maxsize=2) + + @gen.coroutine + def consumer(): + while True: + item = yield q.get() + try: + print('Doing work on %s' % item) + yield gen.sleep(0.01) + finally: + q.task_done() + + @gen.coroutine + def producer(): + for item in range(5): + yield q.put(item) + print('Put %s' % item) + + @gen.coroutine + def main(): + consumer() # Start consumer. + yield producer() # Wait for producer to put all tasks. + yield q.join() # Wait for consumer to finish all tasks. + print('Done') + + io_loop.run_sync(main) + + .. testoutput:: + + Put 0 + Put 1 + Put 2 + Doing work on 0 + Doing work on 1 + Put 3 + Doing work on 2 + Put 4 + Doing work on 3 + Doing work on 4 + Done """ def __init__(self, maxsize=0): if maxsize is None: @@ -220,6 +263,23 @@ class PriorityQueue(Queue): """A `.Queue` that retrieves entries in priority order, lowest first. Entries are typically tuples like ``(priority number, data)``. + + .. testcode:: + + q = queues.PriorityQueue() + q.put((1, 'medium-priority item')) + q.put((0, 'high-priority item')) + q.put((10, 'low-priority item')) + + print(q.get_nowait()) + print(q.get_nowait()) + print(q.get_nowait()) + + .. testoutput:: + + (0, 'high-priority item') + (1, 'medium-priority item') + (10, 'low-priority item') """ def _init(self): self._queue = [] @@ -232,7 +292,25 @@ class PriorityQueue(Queue): class LifoQueue(Queue): - """A `.Queue` that retrieves the most recently put items first.""" + """A `.Queue` that retrieves the most recently put items first. + + .. testcode:: + + q = queues.LifoQueue() + q.put(3) + q.put(2) + q.put(1) + + print(q.get_nowait()) + print(q.get_nowait()) + print(q.get_nowait()) + + .. testoutput:: + + 1 + 2 + 3 + """ def _init(self): self._queue = []