[Python-checkins] cpython (merge 3.4 -> default): (Merge 3.4) Issue #21163, asyncio: Fix some "Task was destroyed but it is

victor.stinner python-checkins at python.org
Wed Jun 25 23:14:12 CEST 2014


http://hg.python.org/cpython/rev/7877aab90c61
changeset: 91413:7877aab90c61
parent: 91411:7346ba934097
parent: 91412:1088023d971c
user: Victor Stinner <victor.stinner at gmail.com>
date: Wed Jun 25 23:12:58 2014 +0200
summary:
 (Merge 3.4) Issue #21163, asyncio: Fix some "Task was destroyed but it is
pending!" logs in tests
files:
 Lib/test/test_asyncio/test_locks.py | 1 +
 Lib/test/test_asyncio/test_queues.py | 27 ++++++++++-----
 Lib/test/test_asyncio/test_tasks.py | 10 ++---
 3 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py
--- a/Lib/test/test_asyncio/test_locks.py
+++ b/Lib/test/test_asyncio/test_locks.py
@@ -783,6 +783,7 @@
 
 # cleanup locked semaphore
 sem.release()
+ self.loop.run_until_complete(t4)
 
 def test_acquire_cancel(self):
 sem = asyncio.Semaphore(loop=self.loop)
diff --git a/Lib/test/test_asyncio/test_queues.py b/Lib/test/test_asyncio/test_queues.py
--- a/Lib/test/test_asyncio/test_queues.py
+++ b/Lib/test/test_asyncio/test_queues.py
@@ -362,16 +362,21 @@
 def test_put_cancelled_race(self):
 q = asyncio.Queue(loop=self.loop, maxsize=1)
 
- asyncio.Task(q.put('a'), loop=self.loop)
- asyncio.Task(q.put('c'), loop=self.loop)
- t = asyncio.Task(q.put('b'), loop=self.loop)
+ put_a = asyncio.Task(q.put('a'), loop=self.loop)
+ put_b = asyncio.Task(q.put('b'), loop=self.loop)
+ put_c = asyncio.Task(q.put('X'), loop=self.loop)
 
 test_utils.run_briefly(self.loop)
- t.cancel()
+ self.assertTrue(put_a.done())
+ self.assertFalse(put_b.done())
+
+ put_c.cancel()
 test_utils.run_briefly(self.loop)
- self.assertTrue(t.done())
+ self.assertTrue(put_c.done())
 self.assertEqual(q.get_nowait(), 'a')
- self.assertEqual(q.get_nowait(), 'c')
+ self.assertEqual(q.get_nowait(), 'b')
+
+ self.loop.run_until_complete(put_b)
 
 def test_put_with_waiting_getters(self):
 q = asyncio.Queue(loop=self.loop)
@@ -431,18 +436,20 @@
 
 @asyncio.coroutine
 def test():
- for _ in range(2):
- asyncio.Task(worker(), loop=self.loop)
+ tasks = [asyncio.Task(worker(), loop=self.loop)
+ for index in range(2)]
 
 yield from q.join()
+ return tasks
 
- self.loop.run_until_complete(test())
+ tasks = self.loop.run_until_complete(test())
 self.assertEqual(sum(range(100)), accumulator)
 
 # close running generators
 running = False
- for i in range(2):
+ for i in range(len(tasks)):
 q.put_nowait(0)
+ self.loop.run_until_complete(asyncio.wait(tasks, loop=self.loop))
 
 def test_join_empty_queue(self):
 q = asyncio.JoinableQueue(loop=self.loop)
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -1763,16 +1763,14 @@
 gen2 = coro()
 fut = asyncio.gather(gen1, gen2)
 self.assertIs(fut._loop, self.one_loop)
- gen1.close()
- gen2.close()
+ self.one_loop.run_until_complete(fut)
 
 self.set_event_loop(self.other_loop, cleanup=False)
 gen3 = coro()
 gen4 = coro()
- fut = asyncio.gather(gen3, gen4, loop=self.other_loop)
- self.assertIs(fut._loop, self.other_loop)
- gen3.close()
- gen4.close()
+ fut2 = asyncio.gather(gen3, gen4, loop=self.other_loop)
+ self.assertIs(fut2._loop, self.other_loop)
+ self.other_loop.run_until_complete(fut2)
 
 def test_duplicate_coroutines(self):
 @asyncio.coroutine
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /