Skip to content

Commit 6fb9cfc

Browse files
authored
bpo-46771: Review tweaks (#31483)
* Rename deadline to when(), clean up type annotations * Revert cancel counters for future PR
1 parent 233534b commit 6fb9cfc

File tree

4 files changed

+31
-22
lines changed

4 files changed

+31
-22
lines changed

Lib/asyncio/tasks.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__(self, coro, *, loop=None, name=None):
105105
else:
106106
self._name = str(name)
107107

108-
self._num_cancels_requested = 0
108+
self._cancel_requested = False
109109
self._must_cancel = False
110110
self._fut_waiter = None
111111
self._coro = coro
@@ -202,9 +202,9 @@ def cancel(self, msg=None):
202202
self._log_traceback = False
203203
if self.done():
204204
return False
205-
self._num_cancels_requested += 1
206-
if self._num_cancels_requested > 1:
205+
if self._cancel_requested:
207206
return False
207+
self._cancel_requested = True
208208
if self._fut_waiter is not None:
209209
if self._fut_waiter.cancel(msg=msg):
210210
# Leave self._fut_waiter; it may be a Task that
@@ -216,13 +216,15 @@ def cancel(self, msg=None):
216216
self._cancel_message = msg
217217
return True
218218

219-
def cancelling(self) -> int:
220-
return self._num_cancels_requested
219+
def cancelling(self):
220+
return self._cancel_requested
221221

222-
def uncancel(self) -> int:
223-
if self._num_cancels_requested > 0:
224-
self._num_cancels_requested -= 1
225-
return self._num_cancels_requested
222+
def uncancel(self):
223+
if self._cancel_requested:
224+
self._cancel_requested = False
225+
return True
226+
else:
227+
return False
226228

227229
def __step(self, exc=None):
228230
if self.done():

Lib/asyncio/timeouts.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ def __init__(self, deadline: Optional[float]) -> None:
3232
self._task: Optional[tasks.Task[Any]] = None
3333
self._deadline = deadline
3434

35-
@property
36-
def deadline(self) -> Optional[float]:
35+
def when(self) -> Optional[float]:
3736
return self._deadline
3837

3938
def reschedule(self, deadline: Optional[float]) -> None:

Lib/test/test_asyncio/test_timeouts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async def test_timeout_at_basic(self):
4242
async with asyncio.timeout_at(deadline) as cm:
4343
await asyncio.sleep(10)
4444
self.assertTrue(cm.expired())
45-
self.assertEqual(deadline, cm.deadline)
45+
self.assertEqual(deadline, cm.when())
4646

4747
async def test_nested_timeouts(self):
4848
cancel = False
@@ -89,7 +89,7 @@ async def test_timeout_disabled(self):
8989
t1 = loop.time()
9090

9191
self.assertFalse(cm.expired())
92-
self.assertIsNone(cm.deadline)
92+
self.assertIsNone(cm.when())
9393
# finised fast. Very busy CI box requires high enough limit,
9494
# that's why 0.01 cannot be used
9595
self.assertLess(t1-t0, 2)
@@ -102,7 +102,7 @@ async def test_timeout_at_disabled(self):
102102
t1 = loop.time()
103103

104104
self.assertFalse(cm.expired())
105-
self.assertIsNone(cm.deadline)
105+
self.assertIsNone(cm.when())
106106
# finised fast. Very busy CI box requires high enough limit,
107107
# that's why 0.01 cannot be used
108108
self.assertLess(t1-t0, 2)

Modules/_asynciomodule.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ typedef struct {
9191
PyObject *task_context;
9292
int task_must_cancel;
9393
int task_log_destroy_pending;
94-
int task_num_cancels_requested;
94+
int task_cancel_requested;
9595
} TaskObj;
9696

9797
typedef struct {
@@ -2040,7 +2040,7 @@ _asyncio_Task___init___impl(TaskObj *self, PyObject *coro, PyObject *loop,
20402040
Py_CLEAR(self->task_fut_waiter);
20412041
self->task_must_cancel = 0;
20422042
self->task_log_destroy_pending = 1;
2043-
self->task_num_cancels_requested = 0;
2043+
self->task_cancel_requested = 0;
20442044
Py_INCREF(coro);
20452045
Py_XSETREF(self->task_coro, coro);
20462046

@@ -2207,10 +2207,10 @@ _asyncio_Task_cancel_impl(TaskObj *self, PyObject *msg)
22072207
Py_RETURN_FALSE;
22082208
}
22092209

2210-
self->task_num_cancels_requested += 1;
2211-
if (self->task_num_cancels_requested > 1) {
2210+
if (self->task_cancel_requested) {
22122211
Py_RETURN_FALSE;
22132212
}
2213+
self->task_cancel_requested = 1;
22142214

22152215
if (self->task_fut_waiter) {
22162216
PyObject *res;
@@ -2256,7 +2256,12 @@ _asyncio_Task_cancelling_impl(TaskObj *self)
22562256
/*[clinic end generated code: output=803b3af96f917d7e input=c50e50f9c3ca4676]*/
22572257
/*[clinic end generated code]*/
22582258
{
2259-
return PyLong_FromLong(self->task_num_cancels_requested);
2259+
if (self->task_cancel_requested) {
2260+
Py_RETURN_TRUE;
2261+
}
2262+
else {
2263+
Py_RETURN_FALSE;
2264+
}
22602265
}
22612266

22622267
/*[clinic input]
@@ -2275,10 +2280,13 @@ _asyncio_Task_uncancel_impl(TaskObj *self)
22752280
/*[clinic end generated code: output=58184d236a817d3c input=5db95e28fcb6f7cd]*/
22762281
/*[clinic end generated code]*/
22772282
{
2278-
if (self->task_num_cancels_requested > 0) {
2279-
self->task_num_cancels_requested -= 1;
2283+
if (self->task_cancel_requested) {
2284+
self->task_cancel_requested = 0;
2285+
Py_RETURN_TRUE;
2286+
}
2287+
else {
2288+
Py_RETURN_FALSE;
22802289
}
2281-
return PyLong_FromLong(self->task_num_cancels_requested);
22822290
}
22832291

22842292
/*[clinic input]

0 commit comments

Comments
 (0)