<div dir="ltr">Thanks for the code Raymond. However, what I use is actually simpler:<div><div><br></div><div>def iterate(queue, block=False):</div><div>    '''Iterate over the items in the queue.'''</div>

<div>    while True:</div><div>        try:</div><div>            yield queue.get(block=block)</div><div>        except Queue.Empty:</div><div>            raise StopIteration</div><div><br></div><div>Since it's a generator, the flow of the program is (get item) -> (process it) -> (get item) -> (process it) instead of getting all the items, putting them in a list, and then beginning to process. (Because by the time we're done processing, there might be more work in the queue.)</div>

<div><br></div><div>Ram.</div><div><br></div><div class="gmail_quote">On Wed, Jan 20, 2010 at 9:36 PM, Raymond Hettinger <span dir="ltr"><<a href="mailto:raymond.hettinger@gmail.com">raymond.hettinger@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div><div></div><div class="h5"><br><div><div>On Jan 20, 2010, at 3:59 AM, cool-RR wrote:</div>

<br><blockquote type="cite"><div dir="ltr">On Wed, Jan 20, 2010 at 7:24 AM, Anh Hai Trinh <span dir="ltr"><<a href="mailto:anh.hai.trinh@gmail.com" target="_blank">anh.hai.trinh@gmail.com</a>></span> wrote:<br><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

[...]<br>
<br>
I agree, however, that this should be left out of the stdlib API.<br>
<font color="#888888"><br>
--<br>
// aht</font></blockquote><div><br></div><div>Okay, but what about having an object like `Queue.dump` (or some other name instead of `dump`), which can be iterated? This will be similar to `dict.keys` and `dict.values`.</div>



<div><font color="#000000"><font color="#144FAE"><br></font></font></div></div></div></blockquote></div><div><br></div></div></div><div>I think you need to abandon the notion of iteration</div><div>and instead focus on your original use case of</div>

<div>(destructively) pulling all of the items out of a queue.</div><div><br></div><div>Taking a cue (no pun intended) from the DB-API's</div><div>fetchone() and fetchall(), perhaps you're looking for</div><div>a getall() method?</div>

<div><br></div><div><br></div><div><div>    def get_all(self, block=True, timeout=None):</div><div>        """Remove and return all items from the queue.</div><div><br></div><div>        If optional args 'block' is true and 'timeout' is None (the default),</div>

<div>        block if necessary until an item is available. If 'timeout' is</div><div>        a positive number, it blocks at most 'timeout' seconds and raises</div><div>        the Empty exception if no item was available within that time.</div>

<div>        Otherwise ('block' is false), return an item if one is immediately</div><div>        available, else raise the Empty exception ('timeout' is ignored</div><div>        in that case).</div><div>

        """</div><div>        self.not_empty.acquire()</div><div>        try:</div><div>            if not block:</div><div>                if not self._qsize():</div><div>                    raise Empty</div>

<div>            elif timeout is None:</div><div>                while not self._qsize():</div><div>                    self.not_empty.wait()</div><div>            elif timeout < 0:</div><div>                raise ValueError("'timeout' must be a positive number")</div>

<div>            else:</div><div>                endtime = _time() + timeout</div><div>                while not self._qsize():</div><div>                    remaining = endtime - _time()</div><div>                    if remaining <= 0.0:</div>

<div>                        raise Empty</div><div>                    self.not_empty.wait(remaining)</div><div>            result = []</div><div>            while self._qsize():</div><div>                result.append(self._get())</div>

<div>            self.not_full.notify()</div><div>            return result</div><div>        finally:</div><div>            self.not_empty.release()</div><div><br></div><font color="#888888"><div>Raymond</div></font></div>

</div></blockquote></div><br><br clear="all"><br>-- <br>Sincerely,<br>Ram Rachum<br>
</div></div>