Index: Lib/queue.py =================================================================== --- Lib/queue.py (revision 85491) +++ Lib/queue.py (working copy) @@ -110,14 +110,14 @@ def full(self): """Return True if the queue is full, False otherwise (not reliable!). - This method is likely to be removed at some point. Use qsize() == n + This method is likely to be removed at some point. Use qsize()>= n as a direct substitute, but be aware that either approach risks a race condition where a queue can shrink before the result of full() or qsize() can be used. """ self.mutex.acquire() - n = 0 < self.maxsize == self._qsize() + n = 0 < self.maxsize <= self._qsize() self.mutex.release() return n @@ -136,16 +136,16 @@ try: if self.maxsize> 0: if not block: - if self._qsize() == self.maxsize: + if self._qsize()>= self.maxsize: raise Full elif timeout is None: - while self._qsize() == self.maxsize: + while self._qsize()>= self.maxsize: self.not_full.wait() elif timeout < 0: raise ValueError("'timeout' must be a positive number") else: endtime = _time() + timeout - while self._qsize() == self.maxsize: + while self._qsize()>= self.maxsize: remaining = endtime - _time() if remaining <= 0.0: raise Full Index: Lib/test/test_queue.py =================================================================== --- Lib/test/test_queue.py (revision 85491) +++ Lib/test/test_queue.py (working copy) @@ -216,7 +216,22 @@ with self.assertRaises(queue.Empty): q.get_nowait() + def test_shrinking_queue_full(self): + q = self.type2test(3) + q.put(1) + q.put(2) + q.put(3) + with self.assertRaises(queue.Full): + q.put_nowait(4) + # shrink the queue + q.maxsize = 2 + with self.assertRaises(queue.Full): + print(q._qsize(), q.maxsize) + print(q.maxsize <= q._qsize()) + q.put_nowait(4) + + class QueueTest(BaseQueueTest): type2test = queue.Queue