Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ddc6ad6

Browse files
committed
Always allow getters to re-check queue empty
1 parent 1135d85 commit ddc6ad6

2 files changed

Lines changed: 12 additions & 5 deletions

File tree

Lib/asyncio/queues.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,10 @@ def shutdown(self, immediate=False):
272272
self._unfinished_tasks -= 1
273273
if self._unfinished_tasks <= 0:
274274
self._finished.set()
275-
while self._getters:
276-
getter = self._getters.popleft()
277-
if not getter.done():
278-
getter.set_result(None)
275+
while self._getters:
276+
getter = self._getters.popleft()
277+
if not getter.done():
278+
getter.set_result(None)
279279
while self._putters:
280280
putter = self._putters.popleft()
281281
if not putter.done():

Lib/test/test_asyncio/test_queues.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,12 @@ async def test_format(self):
551551
async def test_shutdown_empty(self):
552552
# Test shutting down an empty queue
553553

554-
# Setup empty queue and join() task
554+
# Setup empty queue, and join() and get() tasks
555555
q = self.q_class()
556556
loop = asyncio.get_running_loop()
557557
join_task = loop.create_task(q.join())
558+
get_task = loop.create_task(q.get())
559+
await self._ensure_started(get_task) # want pending before shutdown
558560

559561
# Perform shut-down
560562
q.shutdown(immediate=False) # unfinished tasks: 0 -> 0
@@ -566,6 +568,11 @@ async def test_shutdown_empty(self):
566568
self.assertTrue(join_task.done())
567569
await join_task
568570

571+
# Ensure get() task is finished, and raised ShutDown
572+
self.assertTrue(get_task.done())
573+
with self.assertRaisesShutdown():
574+
await get_task
575+
569576
# Ensure put() and get() raise ShutDown
570577
with self.assertRaisesShutdown():
571578
await q.put("data")

0 commit comments

Comments
 (0)