def coro(loop):
self.assertTrue(Task.current_task(loop=loop) is task)
+ # See http://bugs.python.org/issue29271 for details:
+ asyncio.set_event_loop(loop)
+ try:
+ self.assertIs(Task.current_task(None), task)
+ self.assertIs(Task.current_task(), task)
+ finally:
+ asyncio.set_event_loop(None)
+
task = self.new_task(self.loop, coro(self.loop))
self.loop.run_until_complete(task)
self.assertIsNone(Task.current_task(loop=self.loop))
# schedule the task
coro = kill_me(self.loop)
task = asyncio.ensure_future(coro, loop=self.loop)
+
self.assertEqual(Task.all_tasks(loop=self.loop), {task})
+ # See http://bugs.python.org/issue29271 for details:
+ asyncio.set_event_loop(self.loop)
+ try:
+ self.assertEqual(Task.all_tasks(), {task})
+ self.assertEqual(Task.all_tasks(None), {task})
+ finally:
+ asyncio.set_event_loop(None)
+
# execute the task so it waits for future
self.loop._run_once()
self.assertEqual(len(self.loop._ready), 0)
Library
-------
+- bpo-29271: Fix Task.current_task and Task.all_tasks implemented in C
+ to accept None argument as their pure Python implementation.
+
- bpo-29703: Fix asyncio to support instantiation of new event loops
in child processes.
@classmethod
_asyncio.Task.current_task
- loop: 'O' = NULL
+ loop: 'O' = None
Return the currently running task in an event loop or None.
static PyObject *
_asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop)
-/*[clinic end generated code: output=99fbe7332c516e03 input=cd784537f02cf833]*/
+/*[clinic end generated code: output=99fbe7332c516e03 input=a0d6cdf2e3b243e1]*/
{
PyObject *res;
- if (loop == NULL) {
+ if (loop == Py_None) {
loop = _PyObject_CallNoArg(asyncio_get_event_loop);
if (loop == NULL) {
return NULL;
@classmethod
_asyncio.Task.all_tasks
- loop: 'O' = NULL
+ loop: 'O' = None
Return a set of all tasks for an event loop.
static PyObject *
_asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop)
-/*[clinic end generated code: output=11f9b20749ccca5d input=cd64aa5f88bd5c49]*/
+/*[clinic end generated code: output=11f9b20749ccca5d input=c6f5b53bd487488f]*/
{
PyObject *res;
- if (loop == NULL) {
+ if (loop == Py_None) {
loop = _PyObject_CallNoArg(asyncio_get_event_loop);
if (loop == NULL) {
return NULL;
PyObject *return_value = NULL;
static const char * const _keywords[] = {"loop", NULL};
static _PyArg_Parser _parser = {"|O:current_task", _keywords, 0};
- PyObject *loop = NULL;
+ PyObject *loop = Py_None;
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
&loop)) {
PyObject *return_value = NULL;
static const char * const _keywords[] = {"loop", NULL};
static _PyArg_Parser _parser = {"|O:all_tasks", _keywords, 0};
- PyObject *loop = NULL;
+ PyObject *loop = Py_None;
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
&loop)) {
exit:
return return_value;
}
-/*[clinic end generated code: output=07a15bbb28d03edc input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3dfec49689cebd4c input=a9049054013a1b77]*/