diff -r a6892bd4f752 Lib/asyncio/queues.py --- a/Lib/asyncio/queues.py Wed Jun 11 06:19:47 2014 -0700 +++ b/Lib/asyncio/queues.py Wed Jun 11 22:53:53 2014 +0700 @@ -105,7 +105,7 @@ 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 @@ 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 @@ 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) diff -r a6892bd4f752 Lib/test/test_asyncio/test_queues.py --- a/Lib/test/test_asyncio/test_queues.py Wed Jun 11 06:19:47 2014 -0700 +++ b/Lib/test/test_asyncio/test_queues.py Wed Jun 11 22:53:53 2014 +0700 @@ -339,6 +339,21 @@ 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)