bpo-32610: Fix asyncio.all_tasks() to return only pending tasks. (GH-7174)

This commit is contained in:
Yury Selivanov 2018-05-28 17:54:02 -04:00 committed by GitHub
parent fdccfe09f0
commit 416c1ebd98
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 51 additions and 9 deletions

View file

@ -33,6 +33,16 @@ def current_task(loop=None):
def all_tasks(loop=None):
"""Return a set of all tasks for the loop."""
if loop is None:
loop = events.get_running_loop()
return {t for t in _all_tasks
if futures._get_loop(t) is loop and not t.done()}
def _all_tasks_compat(loop=None):
# Different from "all_task()" by returning *all* Tasks, including
# the completed ones. Used to implement deprecated "Tasks.all_task()"
# method.
if loop is None:
loop = events.get_event_loop()
return {t for t in _all_tasks if futures._get_loop(t) is loop}
@ -82,7 +92,7 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
"use asyncio.all_tasks() instead",
PendingDeprecationWarning,
stacklevel=2)
return all_tasks(loop)
return _all_tasks_compat(loop)
def __init__(self, coro, *, loop=None):
super().__init__(loop=loop)