<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jan 20, 2010, at 3:59 AM, cool-RR wrote:</div><br class="Apple-interchange-newline"><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">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 class="Apple-style-span" color="#000000"><font class="Apple-style-span" color="#144FAE"><br></font></font></div></div></div></blockquote></div><div><br></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><div>Raymond</div></div></body></html>