Skip to content

Commit 9aa3417

Browse files
author
Jimmy Lai
committed
bpo-33521 Optimize asyncio.isfuture by providing C implementation.
1 parent 01abc6e commit 9aa3417

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

Modules/_asynciomodule.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ static PyObject *traceback_extract_stack;
2727
static PyObject *asyncio_get_event_loop_policy;
2828
static PyObject *asyncio_future_repr_info_func;
2929
static PyObject *asyncio_iscoroutine_func;
30+
static PyObject *asyncio_isfuture_func;
3031
static PyObject *asyncio_task_get_stack_func;
3132
static PyObject *asyncio_task_print_stack_func;
3233
static PyObject *asyncio_task_repr_info_func;
@@ -194,6 +195,19 @@ is_coroutine(PyObject *coro)
194195
}
195196

196197

198+
static inline int
199+
is_future(PyObject *fut)
200+
{
201+
printf("is_future is called.");
202+
if (PyObject_HasAttr(
203+
Py_TYPE(fut), "_asyncio_future_blocking"
204+
) && PyObject_GetAttr(fut, "_asyncio_future_blocking") != Py_None) {
205+
return 1;
206+
}
207+
return 0;
208+
}
209+
210+
197211
static PyObject *
198212
get_future_loop(PyObject *fut)
199213
{
@@ -3170,6 +3184,7 @@ module_free(void *m)
31703184
Py_CLEAR(asyncio_future_repr_info_func);
31713185
Py_CLEAR(asyncio_get_event_loop_policy);
31723186
Py_CLEAR(asyncio_iscoroutine_func);
3187+
Py_CLEAR(asyncio_isfuture_func);
31733188
Py_CLEAR(asyncio_task_get_stack_func);
31743189
Py_CLEAR(asyncio_task_print_stack_func);
31753190
Py_CLEAR(asyncio_task_repr_info_func);
@@ -3236,6 +3251,7 @@ module_init(void)
32363251
GET_MOD_ATTR(asyncio_future_repr_info_func, "_future_repr_info")
32373252
GET_MOD_ATTR(asyncio_InvalidStateError, "InvalidStateError")
32383253
GET_MOD_ATTR(asyncio_CancelledError, "CancelledError")
3254+
GET_MOD_ATTR(asyncio_isfuture_func, "isfuture")
32393255

32403256
WITH_MOD("asyncio.base_tasks")
32413257
GET_MOD_ATTR(asyncio_task_repr_info_func, "_task_repr_info")

0 commit comments

Comments
 (0)