When are you going to go into the trunk and add Py3K warnings for 2.6? I normally would have waiting but I didn't see a commit email for your 'random' cleanup either, Raymond. If you are planning a batch update that's fine by me, but I just want to make sure you don't forget to go back and add the proper warnings.
-Brett On Jan 14, 2008 1:39 PM, raymond.hettinger <python-3000-checkins@python.org> wrote: > Author: raymond.hettinger > Date: Mon Jan 14 22:39:24 2008 > New Revision: 59958 > > Modified: > python/branches/py3k/Doc/library/queue.rst > python/branches/py3k/Lib/Queue.py > python/branches/py3k/Lib/test/test_queue.py > python/branches/py3k/Lib/test/test_socket.py > python/branches/py3k/Misc/NEWS > Log: > Remove Queue.empty() and Queue.full() in favor of using qsize() or trapping > the Empty and Full exceptions. > > Modified: python/branches/py3k/Doc/library/queue.rst > ============================================================================== > --- python/branches/py3k/Doc/library/queue.rst (original) > +++ python/branches/py3k/Doc/library/queue.rst Mon Jan 14 22:39:24 2008 > @@ -53,18 +53,6 @@ > this number is not reliable. > > > -.. method:: Queue.empty() > - > - Return ``True`` if the queue is empty, ``False`` otherwise. Because of > - multithreading semantics, this is not reliable. > - > - > -.. method:: Queue.full() > - > - Return ``True`` if the queue is full, ``False`` otherwise. Because of > - multithreading semantics, this is not reliable. > - > - > .. method:: Queue.put(item[, block[, timeout]]) > > Put *item* into the queue. If optional args *block* is true and *timeout* > is > > Modified: python/branches/py3k/Lib/Queue.py > ============================================================================== > --- python/branches/py3k/Lib/Queue.py (original) > +++ python/branches/py3k/Lib/Queue.py Mon Jan 14 22:39:24 2008 > @@ -23,6 +23,7 @@ > import threading > except ImportError: > import dummy_threading as threading > + self.maxsize = maxsize > self._init(maxsize) > # mutex must be held whenever the queue is mutating. All methods > # that acquire mutex must release it before returning. mutex > @@ -88,20 +89,6 @@ > self.mutex.release() > return n > > - def empty(self): > - """Return True if the queue is empty, False otherwise (not > reliable!).""" > - self.mutex.acquire() > - n = self._empty() > - self.mutex.release() > - return n > - > - def full(self): > - """Return True if the queue is full, False otherwise (not > reliable!).""" > - self.mutex.acquire() > - n = self._full() > - self.mutex.release() > - return n > - > def put(self, item, block=True, timeout=None): > """Put an item into the queue. > > @@ -116,20 +103,22 @@ > self.not_full.acquire() > try: > if not block: > - if self._full(): > + if self.maxsize > 0 and self._qsize() == self.maxsize: > raise Full > elif timeout is None: > - while self._full(): > - self.not_full.wait() > + if self.maxsize > 0: > + while self._qsize() == self.maxsize: > + self.not_full.wait() > else: > if timeout < 0: > raise ValueError("'timeout' must be a positive number") > endtime = _time() + timeout > - while self._full(): > - remaining = endtime - _time() > - if remaining <= 0.0: > - raise Full > - self.not_full.wait(remaining) > + if self.maxsize > 0: > + while self._qsize() == self.maxsize: > + remaining = endtime - _time() > + if remaining <= 0.0: > + raise Full > + self.not_full.wait(remaining) > self._put(item) > self.unfinished_tasks += 1 > self.not_empty.notify() > @@ -158,16 +147,16 @@ > self.not_empty.acquire() > try: > if not block: > - if self._empty(): > + if not self._qsize(): > raise Empty > elif timeout is None: > - while self._empty(): > + while not self._qsize(): > self.not_empty.wait() > else: > if timeout < 0: > raise ValueError("'timeout' must be a positive number") > endtime = _time() + timeout > - while self._empty(): > + while not self._qsize(): > remaining = endtime - _time() > if remaining <= 0.0: > raise Empty > @@ -192,20 +181,11 @@ > > # Initialize the queue representation > def _init(self, maxsize): > - self.maxsize = maxsize > self.queue = deque() > > def _qsize(self): > return len(self.queue) > > - # Check whether the queue is empty > - def _empty(self): > - return not self.queue > - > - # Check whether the queue is full > - def _full(self): > - return self.maxsize > 0 and len(self.queue) == self.maxsize > - > # Put a new item in the queue > def _put(self, item): > self.queue.append(item) > > Modified: python/branches/py3k/Lib/test/test_queue.py > ============================================================================== > --- python/branches/py3k/Lib/test/test_queue.py (original) > +++ python/branches/py3k/Lib/test/test_queue.py Mon Jan 14 22:39:24 2008 > @@ -9,6 +9,9 @@ > > QUEUE_SIZE = 5 > > +def qfull(q): > + return q.maxsize > 0 and q.qsize() == q.maxsize > + > # A thread to run a function that unclogs a blocked Queue. > class _TriggerThread(threading.Thread): > def __init__(self, fn, args): > @@ -96,7 +99,7 @@ > return Queue.Queue._get(self) > > def FailingQueueTest(q): > - if not q.empty(): > + if q.qsize(): > raise RuntimeError("Call this function with an empty queue") > for i in range(QUEUE_SIZE-1): > q.put(i) > @@ -114,7 +117,7 @@ > except FailingQueueException: > pass > q.put("last") > - verify(q.full(), "Queue should be full") > + verify(qfull(q), "Queue should be full") > # Test a failing blocking put > q.fail_next_put = True > try: > @@ -136,17 +139,17 @@ > # Check the Queue isn't damaged. > # put failed, but get succeeded - re-add > q.put("last") > - verify(q.full(), "Queue should be full") > + verify(qfull(q), "Queue should be full") > q.get() > - verify(not q.full(), "Queue should not be full") > + verify(not qfull(q), "Queue should not be full") > q.put("last") > - verify(q.full(), "Queue should be full") > + verify(qfull(q), "Queue should be full") > # Test a blocking put > _doBlockingTest( q.put, ("full",), q.get, ()) > # Empty it > for i in range(QUEUE_SIZE): > q.get() > - verify(q.empty(), "Queue should be empty") > + verify(not q.qsize(), "Queue should be empty") > q.put("first") > q.fail_next_get = True > try: > @@ -154,16 +157,16 @@ > raise TestFailed("The queue didn't fail when it should have") > except FailingQueueException: > pass > - verify(not q.empty(), "Queue should not be empty") > + verify(q.qsize(), "Queue should not be empty") > q.fail_next_get = True > try: > q.get(timeout=0.1) > raise TestFailed("The queue didn't fail when it should have") > except FailingQueueException: > pass > - verify(not q.empty(), "Queue should not be empty") > + verify(q.qsize(), "Queue should not be empty") > q.get() > - verify(q.empty(), "Queue should be empty") > + verify(not q.qsize(), "Queue should be empty") > q.fail_next_get = True > try: > _doExceptionalBlockingTest(q.get, (), q.put, ('empty',), > @@ -172,12 +175,12 @@ > except FailingQueueException: > pass > # put succeeded, but get failed. > - verify(not q.empty(), "Queue should not be empty") > + verify(q.qsize(), "Queue should not be empty") > q.get() > - verify(q.empty(), "Queue should be empty") > + verify(not q.qsize(), "Queue should be empty") > > def SimpleQueueTest(q): > - if not q.empty(): > + if q.qsize(): > raise RuntimeError("Call this function with an empty queue") > # I guess we better check things actually queue correctly a little :) > q.put(111) > @@ -186,10 +189,10 @@ > "Didn't seem to queue the correct data!") > for i in range(QUEUE_SIZE-1): > q.put(i) > - verify(not q.empty(), "Queue should not be empty") > - verify(not q.full(), "Queue should not be full") > + verify(q.qsize(), "Queue should not be empty") > + verify(not qfull(q), "Queue should not be full") > q.put("last") > - verify(q.full(), "Queue should be full") > + verify(qfull(q), "Queue should be full") > try: > q.put("full", block=0) > raise TestFailed("Didn't appear to block with a full queue") > @@ -206,7 +209,7 @@ > # Empty it > for i in range(QUEUE_SIZE): > q.get() > - verify(q.empty(), "Queue should be empty") > + verify(not q.qsize(), "Queue should be empty") > try: > q.get(block=0) > raise TestFailed("Didn't appear to block with an empty queue") > > Modified: python/branches/py3k/Lib/test/test_socket.py > ============================================================================== > --- python/branches/py3k/Lib/test/test_socket.py (original) > +++ python/branches/py3k/Lib/test/test_socket.py Mon Jan 14 22:39:24 > 2008 > @@ -118,7 +118,7 @@ > self.__tearDown() > self.done.wait() > > - if not self.queue.empty(): > + if self.queue.qsize(): > msg = self.queue.get() > self.fail(msg) > > > Modified: python/branches/py3k/Misc/NEWS > ============================================================================== > --- python/branches/py3k/Misc/NEWS (original) > +++ python/branches/py3k/Misc/NEWS Mon Jan 14 22:39:24 2008 > @@ -352,6 +352,9 @@ > Library > ------- > > +- Removed Queue.empty() and Queue.full(). Instead use Queue.qsize() or > + trap the Empty and Full exceptions. > + > - Removed defunct parts of the random module (the Wichmann-Hill generator > and the jumpahead() method). > > _______________________________________________ > Python-3000-checkins mailing list > Python-3000-checkins@python.org > http://mail.python.org/mailman/listinfo/python-3000-checkins > _______________________________________________ Python-3000-checkins mailing list Python-3000-checkins@python.org http://mail.python.org/mailman/listinfo/python-3000-checkins