mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #21723: asyncio.Queue: support any type of number (ex: float) for the
maximum size. Patch written by Vajrasky Kok.
This commit is contained in:
parent
14fbe72777
commit
66dc6b0f53
3 changed files with 21 additions and 3 deletions
|
@ -105,7 +105,7 @@ class Queue:
|
||||||
if self._maxsize <= 0:
|
if self._maxsize <= 0:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return self.qsize() == self._maxsize
|
return self.qsize() >= self._maxsize
|
||||||
|
|
||||||
@coroutine
|
@coroutine
|
||||||
def put(self, item):
|
def put(self, item):
|
||||||
|
@ -126,7 +126,7 @@ class Queue:
|
||||||
self._put(item)
|
self._put(item)
|
||||||
getter.set_result(self._get())
|
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)
|
waiter = futures.Future(loop=self._loop)
|
||||||
|
|
||||||
self._putters.append((item, waiter))
|
self._putters.append((item, waiter))
|
||||||
|
@ -152,7 +152,7 @@ class Queue:
|
||||||
self._put(item)
|
self._put(item)
|
||||||
getter.set_result(self._get())
|
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
|
raise QueueFull
|
||||||
else:
|
else:
|
||||||
self._put(item)
|
self._put(item)
|
||||||
|
|
|
@ -339,6 +339,21 @@ class QueuePutTests(_QueueTestBase):
|
||||||
q.put_nowait(1)
|
q.put_nowait(1)
|
||||||
self.assertRaises(asyncio.QueueFull, q.put_nowait, 2)
|
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):
|
def test_put_cancelled(self):
|
||||||
q = asyncio.Queue(loop=self.loop)
|
q = asyncio.Queue(loop=self.loop)
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,9 @@ Core and Builtins
|
||||||
Library
|
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.
|
- Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop.
|
||||||
run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now
|
run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now
|
||||||
raise an exception if the event loop was closed.
|
raise an exception if the event loop was closed.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue