Skip to content

Commit 2efd376

Browse files
committed
replace storing the task counter on task construction with just getting the next counter at lazy name generation
1 parent 2bb6c1e commit 2efd376

File tree

2 files changed

+5
-10
lines changed

2 files changed

+5
-10
lines changed

Lib/asyncio/tasks.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,8 @@ def __init__(self, coro, *, loop=None, name=None, context=None):
103103
self._log_destroy_pending = False
104104
raise TypeError(f"a coroutine was expected, got {coro!r}")
105105

106-
self._task_name_counter = 0
107106
if name is None:
108-
self._task_name_counter = _task_name_counter()
107+
# optimization: defer task name formatting to first get_name
109108
self._name = None
110109
else:
111110
self._name = str(name)
@@ -146,7 +145,7 @@ def get_context(self):
146145

147146
def get_name(self):
148147
if self._name is None:
149-
self._name = f'Task-{self._task_name_counter}'
148+
self._name = f'Task-{_task_name_counter()}'
150149
return self._name
151150

152151
def set_name(self, value):

Modules/_asynciomodule.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ typedef struct {
129129
int task_must_cancel;
130130
int task_log_destroy_pending;
131131
int task_num_cancels_requested;
132-
uint64_t task_name_counter;
133132
} TaskObj;
134133

135134
typedef struct {
@@ -2066,16 +2065,13 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop,
20662065
self->task_must_cancel = 0;
20672066
self->task_log_destroy_pending = 1;
20682067
self->task_num_cancels_requested = 0;
2069-
self->task_name_counter = 0;
20702068
Py_INCREF(coro);
20712069
Py_XSETREF(self->task_coro, coro);
20722070

20732071
if (name == Py_None) {
20742072
// optimization: defer task name formatting
2075-
// set task_name to None to indicate deferred formatting, and
2076-
// store the task name counter for formatting in get_name impl
2073+
// set task_name to None to indicate deferred formatting
20772074
Py_INCREF(name);
2078-
self->task_name_counter = ++state->task_name_counter;
20792075
} else if (!PyUnicode_CheckExact(name)) {
20802076
name = PyObject_Str(name);
20812077
} else {
@@ -2455,9 +2451,9 @@ _asyncio_Task_get_name_impl(TaskObj *self)
24552451
{
24562452
if (self->task_name) {
24572453
if (Py_IsNone(self->task_name)) {
2458-
assert(self->task_name_counter > 0);
2454+
asyncio_state *state = get_asyncio_state_by_def((PyObject *)self);
24592455
PyObject *name = PyUnicode_FromFormat(
2460-
"Task-%" PRIu64, self->task_name_counter);
2456+
"Task-%" PRIu64, ++state->task_name_counter);
24612457
Py_XSETREF(self->task_name, name);
24622458
return Py_NewRef(self->task_name);
24632459
}

0 commit comments

Comments
 (0)