Skip to content

Commit 840d02f

Browse files
GH-105684: Require asyncio.Task implementations to support set_name method (#105685)
1 parent 829ac13 commit 840d02f

File tree

5 files changed

+8
-16
lines changed

5 files changed

+8
-16
lines changed

Lib/asyncio/base_events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ def create_task(self, coro, *, name=None, context=None):
443443
else:
444444
task = self._task_factory(self, coro, context=context)
445445

446-
tasks._set_task_name(task, name)
446+
task.set_name(name)
447447

448448
return task
449449

Lib/asyncio/taskgroups.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def create_task(self, coro, *, name=None, context=None):
163163
task = self._loop.create_task(coro)
164164
else:
165165
task = self._loop.create_task(coro, context=context)
166-
tasks._set_task_name(task, name)
166+
task.set_name(name)
167167
# optimization: Immediately call the done callback if the task is
168168
# already done (e.g. if the coro was able to complete eagerly),
169169
# and skip scheduling a done callback

Lib/asyncio/tasks.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,19 +68,6 @@ def all_tasks(loop=None):
6868
if futures._get_loop(t) is loop and not t.done()}
6969

7070

71-
def _set_task_name(task, name):
72-
if name is not None:
73-
try:
74-
set_name = task.set_name
75-
except AttributeError:
76-
warnings.warn("Task.set_name() was added in Python 3.8, "
77-
"the method support will be mandatory for third-party "
78-
"task implementations since 3.13.",
79-
DeprecationWarning, stacklevel=3)
80-
else:
81-
set_name(name)
82-
83-
8471
class Task(futures._PyFuture): # Inherit Python Task implementation
8572
# from a Python Future implementation.
8673

@@ -412,7 +399,7 @@ def create_task(coro, *, name=None, context=None):
412399
else:
413400
task = loop.create_task(coro, context=context)
414401

415-
_set_task_name(task, name)
402+
task.set_name(name)
416403
return task
417404

418405

Lib/test/test_asyncio/test_runners.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ def exception(self, *args, **kwargs):
243243
def get_loop(self, *args, **kwargs):
244244
return self._task.get_loop(*args, **kwargs)
245245

246+
def set_name(self, *args, **kwargs):
247+
return self._task.set_name(*args, **kwargs)
246248

247249
async def main():
248250
interrupt_self()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Supporting :meth:`asyncio.Task.set_name` is now mandatory for third party task implementations.
2+
The undocumented :func:`!_set_task_name` function (deprecated since 3.8) has been removed.
3+
Patch by Kumar Aditya.

0 commit comments

Comments
 (0)