[Python-3000-checkins] r59958 - in python/branches/py3k: Doc/library/queue.rst Lib/Queue.py Lib/test/test_queue.py Lib/test/test_socket.py Misc/NEWS

Brett Cannon brett at python.org
Mon Jan 14 23:13:06 CET 2008


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 at 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 at python.org
> http://mail.python.org/mailman/listinfo/python-3000-checkins
>


More information about the Python-3000-checkins mailing list