mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-34270: Make it possible to name asyncio tasks (GH-8547)
Co-authored-by: Antti Haapala <antti.haapala@anttipatterns.com>
This commit is contained in:
parent
52dee687af
commit
cca4eec3c0
13 changed files with 266 additions and 28 deletions
|
@ -87,8 +87,8 @@ class BaseTaskTests:
|
|||
Task = None
|
||||
Future = None
|
||||
|
||||
def new_task(self, loop, coro):
|
||||
return self.__class__.Task(coro, loop=loop)
|
||||
def new_task(self, loop, coro, name='TestTask'):
|
||||
return self.__class__.Task(coro, loop=loop, name=name)
|
||||
|
||||
def new_future(self, loop):
|
||||
return self.__class__.Future(loop=loop)
|
||||
|
@ -295,12 +295,12 @@ class BaseTaskTests:
|
|||
coro = format_coroutine(coro_qualname, 'running', src,
|
||||
t._source_traceback, generator=True)
|
||||
self.assertEqual(repr(t),
|
||||
'<Task pending %s cb=[<Dummy>()]>' % coro)
|
||||
"<Task pending name='TestTask' %s cb=[<Dummy>()]>" % coro)
|
||||
|
||||
# test cancelling Task
|
||||
t.cancel() # Does not take immediate effect!
|
||||
self.assertEqual(repr(t),
|
||||
'<Task cancelling %s cb=[<Dummy>()]>' % coro)
|
||||
"<Task cancelling name='TestTask' %s cb=[<Dummy>()]>" % coro)
|
||||
|
||||
# test cancelled Task
|
||||
self.assertRaises(asyncio.CancelledError,
|
||||
|
@ -308,7 +308,7 @@ class BaseTaskTests:
|
|||
coro = format_coroutine(coro_qualname, 'done', src,
|
||||
t._source_traceback)
|
||||
self.assertEqual(repr(t),
|
||||
'<Task cancelled %s>' % coro)
|
||||
"<Task cancelled name='TestTask' %s>" % coro)
|
||||
|
||||
# test finished Task
|
||||
t = self.new_task(self.loop, notmuch())
|
||||
|
@ -316,7 +316,36 @@ class BaseTaskTests:
|
|||
coro = format_coroutine(coro_qualname, 'done', src,
|
||||
t._source_traceback)
|
||||
self.assertEqual(repr(t),
|
||||
"<Task finished %s result='abc'>" % coro)
|
||||
"<Task finished name='TestTask' %s result='abc'>" % coro)
|
||||
|
||||
def test_task_repr_autogenerated(self):
|
||||
@asyncio.coroutine
|
||||
def notmuch():
|
||||
return 123
|
||||
|
||||
t1 = self.new_task(self.loop, notmuch(), None)
|
||||
t2 = self.new_task(self.loop, notmuch(), None)
|
||||
self.assertNotEqual(repr(t1), repr(t2))
|
||||
|
||||
match1 = re.match("^<Task pending name='Task-(\d+)'", repr(t1))
|
||||
self.assertIsNotNone(match1)
|
||||
match2 = re.match("^<Task pending name='Task-(\d+)'", repr(t2))
|
||||
self.assertIsNotNone(match2)
|
||||
|
||||
# Autogenerated task names should have monotonically increasing numbers
|
||||
self.assertLess(int(match1.group(1)), int(match2.group(1)))
|
||||
self.loop.run_until_complete(t1)
|
||||
self.loop.run_until_complete(t2)
|
||||
|
||||
def test_task_repr_name_not_str(self):
|
||||
@asyncio.coroutine
|
||||
def notmuch():
|
||||
return 123
|
||||
|
||||
t = self.new_task(self.loop, notmuch())
|
||||
t.set_name({6})
|
||||
self.assertEqual(t.get_name(), '{6}')
|
||||
self.loop.run_until_complete(t)
|
||||
|
||||
def test_task_repr_coro_decorator(self):
|
||||
self.loop.set_debug(False)
|
||||
|
@ -376,7 +405,7 @@ class BaseTaskTests:
|
|||
t._source_traceback,
|
||||
generator=not coroutines._DEBUG)
|
||||
self.assertEqual(repr(t),
|
||||
'<Task pending %s cb=[<Dummy>()]>' % coro)
|
||||
"<Task pending name='TestTask' %s cb=[<Dummy>()]>" % coro)
|
||||
self.loop.run_until_complete(t)
|
||||
|
||||
def test_task_repr_wait_for(self):
|
||||
|
@ -2260,6 +2289,18 @@ class BaseTaskTests:
|
|||
|
||||
self.loop.run_until_complete(coro())
|
||||
|
||||
def test_bare_create_named_task(self):
|
||||
|
||||
async def coro_noop():
|
||||
pass
|
||||
|
||||
async def coro():
|
||||
task = asyncio.create_task(coro_noop(), name='No-op')
|
||||
self.assertEqual(task.get_name(), 'No-op')
|
||||
await task
|
||||
|
||||
self.loop.run_until_complete(coro())
|
||||
|
||||
def test_context_1(self):
|
||||
cvar = contextvars.ContextVar('cvar', default='nope')
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue