[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
raymond.hettinger
python-3000-checkins at python.org
Mon Jan 14 22:39:24 CET 2008
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).
More information about the Python-3000-checkins
mailing list