From f5f9a370d47de6239cd766c30da33f15edd1a460 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 30 Apr 2004 22:52:50 +0000 Subject: [PATCH] Add an example application to the docs. --- Doc/lib/libcollections.tex | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/Doc/lib/libcollections.tex b/Doc/lib/libcollections.tex index 14e3bf54d10..c4ba84ca999 100644 --- a/Doc/lib/libcollections.tex +++ b/Doc/lib/libcollections.tex @@ -67,7 +67,7 @@ Deque objects support the following methods: \begin{methoddesc}{rotate}{n} Rotate the deque \var{n} steps to the right. If \var{n} is negative, rotate to the left. Rotating one step to the right - is equivalent to: \samp{d.appendleft(d.pop())}. + is equivalent to: \samp{d.appendleft(d.pop())}. \end{methoddesc} In addition to the above, deques support iteration, pickling, \samp{len(d)}, @@ -128,5 +128,34 @@ IndexError: pop from an empty deque >>> d.extendleft('abc') # extendleft() reverses the input order >>> d deque(['c', 'b', 'a']) +\end{verbatim} -\end{verbatim} + +A roundrobin task server can be built from a \class{deque} using +\method{popleft()} to select the current task and \method{append()} +to add it back to the tasklist if the input stream is not exhausted: + +\begin{verbatim} +def roundrobin(*iterables): + pending = deque(iter(i) for i in iterables) + while pending: + task = pending.popleft() + try: + yield task.next() + except StopIteration: + continue + pending.append(task) + +>>> for value in roundrobin('abc', 'd', 'efgh'): + print value + +a +d +e +b +f +c +g +h + +\end{verbatim}