]> granicus.if.org Git - python/commitdiff
Issue #21723: asyncio.Queue: support any type of number (ex: float) for the
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 17 Jun 2014 21:36:21 +0000 (23:36 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 17 Jun 2014 21:36:21 +0000 (23:36 +0200)
maximum size. Patch written by Vajrasky Kok.

Lib/asyncio/queues.py
Lib/test/test_asyncio/test_queues.py
Misc/NEWS

index 6283db3268f93ea9da2afcd7ac7be488cf93e5b5..57afb053ee2710c405afcb3f5e40e8bdf5bf2e8e 100644 (file)
@@ -105,7 +105,7 @@ class Queue:
         if self._maxsize <= 0:
             return False
         else:
-            return self.qsize() == self._maxsize
+            return self.qsize() >= self._maxsize
 
     @coroutine
     def put(self, item):
@@ -126,7 +126,7 @@ class Queue:
             self._put(item)
             getter.set_result(self._get())
 
-        elif self._maxsize > 0 and self._maxsize == self.qsize():
+        elif self._maxsize > 0 and self._maxsize <= self.qsize():
             waiter = futures.Future(loop=self._loop)
 
             self._putters.append((item, waiter))
@@ -152,7 +152,7 @@ class Queue:
             self._put(item)
             getter.set_result(self._get())
 
-        elif self._maxsize > 0 and self._maxsize == self.qsize():
+        elif self._maxsize > 0 and self._maxsize <= self.qsize():
             raise QueueFull
         else:
             self._put(item)
index f79fee21d6851ce5bbf6b86f9bec107bf785be40..820234dfe1df2cf5eab807917ebea0b2196a25df 100644 (file)
@@ -339,6 +339,21 @@ class QueuePutTests(_QueueTestBase):
         q.put_nowait(1)
         self.assertRaises(asyncio.QueueFull, q.put_nowait, 2)
 
+    def test_float_maxsize(self):
+        q = asyncio.Queue(maxsize=1.3, loop=self.loop)
+        q.put_nowait(1)
+        q.put_nowait(2)
+        self.assertTrue(q.full())
+        self.assertRaises(asyncio.QueueFull, q.put_nowait, 3)
+
+        q = asyncio.Queue(maxsize=1.3, loop=self.loop)
+        @asyncio.coroutine
+        def queue_put():
+            yield from q.put(1)
+            yield from q.put(2)
+            self.assertTrue(q.full())
+        self.loop.run_until_complete(queue_put())
+
     def test_put_cancelled(self):
         q = asyncio.Queue(loop=self.loop)
 
index ec8b4d9f3ff4de9d2cf0053e5c8a241443e9930c..6e333a4944762423537aa8c768f4839a635f895b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #21723: asyncio.Queue: support any type of number (ex: float) for the
+  maximum size. Patch written by Vajrasky Kok.
+
 - Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop.
   run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now
   raise an exception if the event loop was closed.