]> granicus.if.org Git - python/commitdiff
Simplified the new get/get_nowait/put/put_nowait implementations a bit.
authorTim Peters <tim.peters@gmail.com>
Mon, 12 Jul 2004 01:20:32 +0000 (01:20 +0000)
committerTim Peters <tim.peters@gmail.com>
Mon, 12 Jul 2004 01:20:32 +0000 (01:20 +0000)
Lib/Queue.py

index 65d1eeaca3818b51c3d9232d82f29b1f216f9b64..c6c608b7440ce052960ebe451ff6ff8cc8ac8d00 100644 (file)
@@ -68,11 +68,12 @@ class Queue:
         is immediately available, else raise the Full exception ('timeout'
         is ignored in that case).
         """
-        if not block:
-            return self.put_nowait(item)
         self.not_full.acquire()
         try:
-            if timeout is None:
+            if not block:
+                if self._full():
+                    raise Full
+            elif timeout is None:
                 while self._full():
                     self.not_full.wait()
             else:
@@ -81,7 +82,7 @@ class Queue:
                 endtime = _time() + timeout
                 while self._full():
                     remaining = endtime - _time()
-                    if remaining < 0.0:
+                    if remaining <= 0.0:
                         raise Full
                     self.not_full.wait(remaining)
             self._put(item)
@@ -95,15 +96,7 @@ class Queue:
         Only enqueue the item if a free slot is immediately available.
         Otherwise raise the Full exception.
         """
-        self.not_full.acquire()
-        try:
-            if self._full():
-                raise Full
-            else:
-                self._put(item)
-                self.not_empty.notify()
-        finally:
-            self.not_full.release()
+        return self.put(item, False)
 
     def get(self, block=True, timeout=None):
         """Remove and return an item from the queue.
@@ -116,11 +109,12 @@ class Queue:
         available, else raise the Empty exception ('timeout' is ignored
         in that case).
         """
-        if not block:
-            return self.get_nowait()
         self.not_empty.acquire()
         try:
-            if timeout is None:
+            if not block:
+                if self._empty():
+                    raise Empty
+            elif timeout is None:
                 while self._empty():
                     self.not_empty.wait()
             else:
@@ -129,7 +123,7 @@ class Queue:
                 endtime = _time() + timeout
                 while self._empty():
                     remaining = endtime - _time()
-                    if remaining < 0.0:
+                    if remaining <= 0.0:
                         raise Empty
                     self.not_empty.wait(remaining)
             item = self._get()
@@ -144,16 +138,7 @@ class Queue:
         Only get an item if one is immediately available. Otherwise
         raise the Empty exception.
         """
-        self.not_empty.acquire()
-        try:
-            if self._empty():
-                raise Empty
-            else:
-                item = self._get()
-                self.not_full.notify()
-                return item
-        finally:
-            self.not_empty.release()
+        return self.get(False)
 
     # Override these methods to implement other queue organizations
     # (e.g. stack or priority queue).